在应用程序中,是通过处理一系列事件,如DragEnter,DragLeave和DragDrop事件来实现在Windows应用程序中的拖放操作的。通过使用这些事件参数中的可用信息,可以轻松实现拖放操作。
拖放操作在代码中是通过三步实现的,首先是启动拖放操作,在需要拖动数据的控件上实现MouseDown事件响应代码,并调用DoDragDrop()方法;其次是实现拖放效果,在目标控件上添加DragEnter事件响应代码,使用DragDropEffects枚举类型实现移动或复制等拖动效果;最后是放置数据操作,在目标控件上添加DragDrop响应代码,把数据添加到目标控件中。
1
using
System;
2
using
System.Drawing;
3
using
System.Collections;
4
using
System.ComponentModel;
5
using
System.Windows.Forms;
6
using
System.Data;
7
8
namespace
DragDrop
9
{
10
/**//// <summary>
11
/// Form1 的摘要说明。
12
/// </summary>
13
public class Form1 : System.Windows.Forms.Form
14
{
15
private System.Windows.Forms.ListBox listBox1;
16
private System.Windows.Forms.ListBox listBox2;
17
/**//// <summary>
18
/// 必需的设计器变量。
19
/// </summary>
20
private System.ComponentModel.Container components = null;
21
22
public Form1()
23
{
24
//
25
// Windows 窗体设计器支持所必需的
26
//
27
InitializeComponent();
28
29
//
30
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
31
//
32
}
33
34
/**//// <summary>
35
/// 清理所有正在使用的资源。
36
/// </summary>
37
protected override void Dispose( bool disposing )
38
{
39
if( disposing )
40
{
41
if (components != null)
42
{
43
components.Dispose();
44
}
45
}
46
base.Dispose( disposing );
47
}
48
49
Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码
50
/**//// <summary>
51
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
52
/// 此方法的内容。
53
/// </summary>
54
private void InitializeComponent()
55
{
56
this.listBox1 = new System.Windows.Forms.ListBox();
57
this.listBox2 = new System.Windows.Forms.ListBox();
58
this.SuspendLayout();
59
//
60
// listBox1
61
//
62
this.listBox1.ItemHeight = 12;
63
this.listBox1.Location = new System.Drawing.Point(32, 24);
64
this.listBox1.Name = "listBox1";
65
this.listBox1.Size = new System.Drawing.Size(120, 280);
66
this.listBox1.TabIndex = 0;
67
this.listBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDown);
68
//
69
// listBox2
70
//
71
this.listBox2.ItemHeight = 12;
72
this.listBox2.Location = new System.Drawing.Point(248, 24);
73
this.listBox2.Name = "listBox2";
74
this.listBox2.Size = new System.Drawing.Size(120, 280);
75
this.listBox2.TabIndex = 0;
76
this.listBox2.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox2_DragDrop);
77
this.listBox2.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox2_DragEnter);
78
//
79
// Form1
80
//
81
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
82
this.ClientSize = new System.Drawing.Size(408, 333);
83
this.Controls.Add(this.listBox1);
84
this.Controls.Add(this.listBox2);
85
this.Name = "Form1";
86
this.Text = "Form1";
87
this.Load += new System.EventHandler(this.Form1_Load);
88
this.ResumeLayout(false);
89
90
}
91
#endregion
92
93
/**//// <summary>
94
/// 应用程序的主入口点。
95
/// </summary>
96
[STAThread]
97
static void Main()
98
{
99
Application.Run(new Form1());
100
}
101
102
private void Form1_Load(object sender, System.EventArgs e)
103
{
104
this.listBox1.AllowDrop = true;
105
this.listBox2.AllowDrop = true;
106
this.listBox1.Items.Add("a");
107
this.listBox1.Items.Add("b");
108
this.listBox1.Items.Add("c");
109
}
110
111
private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
112
{
113
this.listBox1.DoDragDrop(this.listBox1.Items[this.listBox1.SelectedIndex],DragDropEffects.Move);
114
}
115
116
private void listBox2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
117
{
118
if(e.Data.GetDataPresent("Text"))
119
{
120
e.Effect = DragDropEffects.Move;
121
}
122
}
123
124
private void listBox2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
125
{
126
this.listBox2.Items.Add(e.Data.GetData("Text"));
127
this.listBox1.Items.Remove(e.Data.GetData("Text"));
128
}
129
}
130
}

2

3

4

5

6

7

8

9



10


11

12

13

14



15

16

17


18

19

20

21

22

23



24

25

26

27

28

29

30

31

32

33

34


35

36

37

38



39

40



41

42



43

44

45

46

47

48

49


50


51

52

53

54

55



56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93


94

95

96

97

98



99

100

101

102

103



104

105

106

107

108

109

110

111

112



113

114

115

116

117



118

119



120

121

122

123

124

125



126

127

128

129

130
