以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 Dot NET,C#,ASP,VB 』 (http://bbs.xml.org.cn/list.asp?boardid=43) ---- 全面掌握C#中的拖放操作 (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=76269) |
-- 作者:卷积内核 -- 发布时间:8/4/2009 3:24:00 PM -- 全面掌握C#中的拖放操作 随着桌面系统的推出,利用鼠标的拖放(Drag and Drop)操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使用了拖放操作。拖放操作方便了程序的使用者,但由于拖放操作在程序中的设计工作比较还有点麻烦,甚至是一个难点,许多程序员对其都有点心有余悸。本文就结合微软公司最新的.Net程序开发语言--C#,来全面介绍一下在C#中是如何处理拖放操作的。 在本文中,我们是通过二个代表组件,也是在拖放操作中经常使用到的二个组件--TreeView组件和ListView组件,之间互相进行拖放操作来说明此类问题的。在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。 (1).微软公司视窗2000服务器版 (2)..Net FrameWork SDK Beta 2 要完成此次的拖放操作,必须处理好三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。下面就根据拖放操作的操作顺序来详细介绍: (1).开始"拖"(Drag)操作: 通过"DoDragDrop"方法拉开了拖放操作的第一步。"DoDragDrop"方法的语法为: (2).目标组件允许进行拖放操作: 既然你已经开始进行拖放操作,你还必须告诉你要拖放到的目标组件,要接受你所拖放的数据,"DragEnter"事件正好可以处理。在下列的代码中,我们是通过判断拖放数据类型来确定是否接受拖放,如果是字符串,则可以,否则,则不行。具体代码如下: 此步的处理过程是十分明确的,要分成二步来进行,首先要得到拖放的字符串,其次是在目标组件中加入以此字符串为标题的项目。当然还要在相应的位置了。下面就是实现这二步操作的具体代码:
|
-- 作者:卷积内核 -- 发布时间:8/4/2009 3:25:00 PM -- 三. 由ListView组件到TreeView组件的拖放操作: 由ListView组件到TreeView组件的拖放操作和从TreeView组件到ListView组件相类似,也是通过"ItemDrag"、"DragEnter"、"DragDrop"三个事件来处理的,具体如下: (1).开始"拖"(Drag)操作: 这和前者没有什么实质上的区别,只是在此次的拖放操作开始之前,多加入了一些逻辑判断,让程序更稳健的允许,实现的代码如下: 这一步是进行拖放操作最为一致的,除非你所要进行拖放的数据类型有改变,否则,没有必要对源代码进行什么修改,具体如下: 对于进行拖放操作的不同组件,获得其拖放的数据的实现方法是不一样的,在本步骤中也不例外,但总归大同小异,掌握程序设计的步骤和要点,加上探索、研究的精神,这个问题应该能够解决,下面是实现此步骤的程序代码: |
-- 作者:卷积内核 -- 发布时间:8/4/2009 3:26:00 PM -- 四. 二个组件进行拖放操作的完整源程序代码(dragdrop.cs): 在掌握了上面的这些步骤过以后,可以得到这二个组件相互进行拖放操作的完整代码和编译后程序的运行界面,如下:
图01:二个组件相互进行拖放的程序运行界面 dragdrop.cs的代码如下: AutoScaleBaseSize = new Size(6, 14); private void listView1_ItemDrag(object sender, ItemDragEventArgs e) 五. 其他组件的拖放操作: 本文虽然对TreeView组件和ListView组件之间的拖放操作进行了详细的介绍,对于其他的可以用于拖放操作的组件,很多组件的拖放操作的实现方法都和这二种差不多。但也有一些组件有一些区别,譬如:ListBox组件等,在进行拖放操作的时候,他就没有本文介绍的"ItemDrag"事件,那这怎么办。我们是通过一个变通的方法来实现的。具体是通过"MouseMove"事件和"MouseDown"事件来代替"ItemDrag"事件,其中"MouseMove"事件主要是起到触发拖放操作的作用,"MouseDown"事件主要是起着判断此次拖放操作是否已经完成的作用。对于ListBox组件拖放操作的其他步骤也和上面介绍的二个组件没有什么太大区别。由于篇幅的关系ListBox组件和其他不存在"ItemDrag"事件的组件的拖放操作,这里就不一一介绍了,相信大家能够搞定。 对于大多数组件来说掌握了"ItemDrag"、"DragEnter"、"DragDrop"三个事件的解决办法也就掌握了组件间的拖放操作。当然还有一些例外的组件,但总而言之,拖放操作的实现步骤都是一样的,解决的思路也是大致一致的。由于拖放操作的自身的优点,对于程序员来说尽快掌握是十分必要的,希望本文介绍的内容能够令你满意。 |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
187.500ms |