例:
用MouseDown事件启动拖动操作(最直观的启动事件), 使用DoDragDrop设置将被拖动的数据和拖放效果:
this.button1.MouseDown+=new MouseEventHandler(button1_MouseDown); |
private void button1_MouseDown(object sender, MouseEventArgs e) { button1.DoDragDrop(button1.Text,DragDropEffects.Copy|DragDropEffects.Move); } |
拖动开始于按钮控件,被拖动的数据为字符串(Button控件的Text属性),允许的拖动效果为复制或移动.任何数据都可以被作为DoDragDrop方法的参数.
拖动操作开始后,开始处理QueryContinueDrag事件,以向系统请求继续拖动操作的许可.
现在未真正实现拖放,因为目前不存在可接受被拖动数据的目标.
放置数据
Windows窗体或控件中的任何区域都可以接受数据,是需要将其AllowDrop属性设置为true,并处理DragEnter和DragDrop事件即可.
步骤如下:
A.将窗体或控件的AllowDrop属性设置为true.
B添加DragEnter事件
this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1_DragEnter); |
private void textBox1_DragEnter(object sender, DragEventArgs e) { { e.Effect=DragDropEffects.Copy; } else { e.Effect=DragDropEffects.None; } } |
C用if执行类型检查,确保数据是可以接受的类型,然后设置DragDropEffects枚举,以指定放置发生时的效果.
D为文本框添加DragDrop事件
this.textBox1.DragDrop+=new DragEventHandler(textBox1_DragDrop); |
private void textBox1_DragDrop(object sender, DragEventArgs e) { textBox1.Text=e.Data.GetData(DataFormats.Text).ToString(); } |
使用GetData方法获取被放置的数据.(文本框的Text属性设置为被放置的文本)
E鼠标移动到文本框时,鼠标指针变成”可添加”标志,激发事件为文本框控件的DragEnter,
松开鼠标左键, Text属性被赋值,激发事件为文本框控件的DragDrop
F拖放中,根据KeyState属性决定拖放操作的具体效果.按Ctrl执行复制操作G Effect属性可设置为DragDropEffects枚举
All 从拖动源复制或移除数据,并将其滚动到放置目标中
Copy 复制
Link 链接
Move 移动
None 放置目标不接受该数据
Scroll 将在放置目标中开始滚动或当前正在滚动