自己在程序里动态添加一个Button,想在程序运行时能动态地拖动这个button。
Button b = new Button();
然后把b添加到我用的程序中并显示出来,然后我使用了:
b.DragDrop += new System.Windows.Forms.DragEventHandler(this.h);private void h()
{
....
之中的代码还不知道怎么写
}但是没反应,请各位指教应该怎么实现?谢谢!

解决方案 »

  1.   

    你的思路不对,要想使button能动态的移动,不应该用.DragDrop事件,这个是控件要接受dragdrop事件时才注册的委托,我觉得你可以这样来实现:
    1)给button注册一个mousedown事件,当鼠标点下去的时候就触发这个事件了,你可以在这里写一些变量,比如: bool readyToMove = true;还可以记录一下这个时候鼠标的位置
    2)给button注册一个mouseup事件,当鼠标抬起来的时候会触发这个事件,比如:readyToMove = false; 
    3)给button注册一个mousemove事件,当鼠标移动的时候触发这个事件,在这个时候判断一下,3.1)如果readyToMove == true,那么就表示鼠标按下且移动,这是我们想要的动作,这个时候就要改变button的位置,获取当前鼠标位置,判断出当前鼠标位置与mousedown中鼠标位置的偏移,让button移动相同的偏移量即可;
    3.2)如果readyToMove == false,那就表示鼠标仅仅在button上方移动了而已,并没有按下(表示不是在拖拽button),不做任何动作;原理就是这样,具体实现需要作些调整
      

  2.   

    .DragDrop是这么用的,假设有A,B两个控件,A中设置allowDrop为true,这样从B中拖个东西到A上放下,如果A注册了dragdrop处理函数,那么这个时候A就可以获得这个事件并处理之,否则A不会获取到这个事件
      

  3.   

    你要调用DoDragDrop()方法来启动拖放,这里有“拖放源”和“拖放目标”的感念,针对拖放有一连串的事件,分别由拖放源和拖放目标引发。
    具体可以看MSDN
    ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxmancli/html/7cce79b6-5835-46fd-b690-73f12ad368b2.htm