在WinForm上拖动控件有两种方式可以实现,方法一通过控件的MouseDown,MouseMove事件实现,可以看到控件随鼠标实时移动(参考http://blog.csdn.net/nj2011zy/article/details/73832610)。这种方法适用于无位置排列的容器内子控件的移动,如Panel容器,优点是可以实时看到控件位置随鼠标移动,清晰可显,一般用于控件在容器(无位置排列)内*拖动,使用于场景的构建,相当于继承原控件,新建可移动的控件。
方法二通过DoDragDrop方法实现控件拖动效果(参考http://blog.csdn.net/nj2011zy/article/details/73943953)。这种方法适用于有位置排序的容器或者有子项的控件,如FlowLayoutPanel容器、TreeView、ListView、ListBox等控件。该方法不能看到子控件或子项随鼠标实时移动,只能实现最终的移动效果,但是可以从鼠标的形状知道拖动的效果(移动、复制、滚动、所有等)。需要设定容器的属性AllowDrop=true,方可实现拖动。此种方法不涉及继承,相当于开通了容器"可拖动"功能。