所有的拖放操作都以拖动开始 , 对象的 DoDragDrop 方法实现了拖动开始时的数据收集功能 .(ListView TreeView 控件具有 ItemDrag 事件 )

  :

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,并处理DragEnterDragDrop事件即可.

步骤如下:

A.将窗体或控件的AllowDrop属性设置为true.

B添加DragEnter事件

this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1_DragEnter);

        

private void textBox1_DragEnter(object sender, DragEventArgs e)

{      
        
if(e.Data.GetDataPresent(DataFormats.Text))

        {      

                  e.Effect=DragDropEffects.Copy;

        }

        else

        {        

                e.Effect=DragDropEffects.None;

        }

}

Cif执行类型检查,确保数据是可以接受的类型,然后设置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     将在放置目标中开始滚动或当前正在滚动
来源:http://www.cnblogs.com/Amor/archive/2005/08/17/216756.aspx