C#中的拖放操作 (转载)

原创 2006年06月13日 09:42:00

C#中的拖放操作 (转载)

 

由TreeView组件到ListView组件的拖放操作: 

必须处理好三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。下面就根据拖放操作的操作顺序来详细介绍:

(1).开始"拖"(Drag)操作:
 通过"DoDragDrop"方法拉开了拖放操作的第一步。"DoDragDrop"方法的语法为: DoDragDrop ( object data , DragDropEffects allowedEffects ) ;
其中第二个参数来是说明此次拖放操作最后所要实现的效果,因为拖放操作有时实现的效果是把源组件中的内容"拖"到目标组件中,这种效果就是 "Move";有时拖放的效果是在目标组件中加入拖动的数据,对源组件的内容是没有什么影响的,这种效果就是"Copy"。当然无论是"Move"还是 "Copy",这都要通过具体的编程来实现,设定这些效果只是告诉操作系统,你进行拖放操作的类型,从而为拖放操作设定特定的图标。此例中实现开始"拖放 "操作的具体实现代码如下: 

private void treeView1_ItemDrag ( object sender , ItemDragEventArgs e )
{
string strItem = e.Item.ToString ( ) ; 
//开始进行"Drag"操作
DoDragDrop ( strItem , DragDropEffects.Copy | DragDropEffects.Move ) ;
}



在上面代码中,我们定义的拖放数据类型是字符串,其实拖放的数据类型可以是很多种的,你可以通过修改"DoDragDrop"方法的第一个参数来设定你所要拖放数据类型,譬如:位图或者其他什么。

(2).目标组件允许进行拖放操作:

既然你已经开始进行拖放操作,你还必须告诉你要拖放到的目标组件,要接受你所拖放的数据,"DragEnter"事件正好可以处理。在下列的代码中,我们是通过判断拖放数据类型来确定是否接受拖放,如果是字符串,则可以,否则,则不行。具体代码如下:

private void listView1_DragEnter ( object sender , DragEventArgs e )
{
//判断是否目前拖动的数据是字符串,如果是,则拖动符串对目的组件进行拷贝
if ( e.Data.GetDataPresent ( DataFormats.Text ) )
e.Effect 
= DragDropEffects.Move ;
else
e.Effect 
= DragDropEffects.None ;
}


(3).获得拖放的字符串,在目标组件中加入相应的内容:

此步的处理过程是十分明确的,要分成二步来进行,首先要得到拖放的字符串,其次是在目标组件中加入以此字符串为标题的项目。当然还要在相应的位置了。下面就是实现这二步操作的具体代码:

 

private void listView1_DragDrop ( object sender , DragEventArgs e )
{
string dummy = "temp" ;
//获得进行"Drag"操作中拖动的字符串
string s = ( string ) e.Data.GetData ( dummy.GetType ( ) ) ;
= s.Substring ( s.IndexOf ( ":" ) + 1 ).Trim ( ) ;
Position.X 
= e.X ;
Position.Y 
= e.Y ;
Position 
= listView1.PointToClient ( Position ) ;
//在目标组件中加入以此字符串为标题的项目
listView1.Items.Add ( new ListViewItem ( s , 0 ) ) ;
}
 

此致通过对这三个事件的编程,已经完成了由TreeView组件到ListView组件的拖放操作。

用C# 实现拖放操作

在应用程序中,是通过处理一系列事件,如DragEnter,DragLeave和DragDrop事件来实现在Windows应用程序中的拖放操作的。通过使用这些事件参数中的可用信息,可以轻松实现拖放操作。...
  • 3cts
  • 3cts
  • 2007年07月21日 06:56
  • 1053

[C#]richtextbox实现拖放

namespace WindowsFormsApplication1 { public partial class Form1 : Form { public ...
  • stu059074244
  • stu059074244
  • 2017年09月01日 09:47
  • 203

C#中实现拖放操作

随着桌面系统的推出,利用鼠标的拖放(Drag and Drop)操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使用了拖放操作。拖放操作方便了程序的使用者...
  • feng991254
  • feng991254
  • 2010年04月06日 10:45
  • 212

C# 文件拖放操作

首先将窗体的 AllowDrop=True; //拖文件到窗体上触发DragEnter事件 private void Form1_DragEnter(object sender, Sy...
  • lishk314
  • lishk314
  • 2013年05月25日 21:33
  • 446

VirtualBox 实现主机和虚拟机的拖放文件

1、运行虚拟机ubuntu后,在这个窗口的设备(Devices)菜单下有一个安装增强功能(Intall Guest Additions) 选项,单击它. 这样virtualbox就把VBoxGuest...
  • fwydone
  • fwydone
  • 2014年12月19日 14:18
  • 2814

Delphi拖放操作

今天明白了如何进行拖放操作(有赖于下面转载的文章)。而且进一步实验如何在cxgrid中拖放记录,其中有一个关键点就是目标对象的OnDragOver中写入Accept := (Source is Tcx...
  • yumenglong
  • yumenglong
  • 2009年08月01日 10:37
  • 2474

C# 拖放操作

随着桌面系统的推出,利用鼠标的拖放(Drag and Drop)操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使用了拖放操作。拖放操作方便了程序的使用者...
  • wxnjob
  • wxnjob
  • 2012年02月21日 14:51
  • 421

全面掌握C#中的拖放操作

全面掌握C#中的拖放操作 随着桌面系统的推出,利用鼠标的拖放(Drag   and   Drop)操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使...
  • ppp9701
  • ppp9701
  • 2012年06月19日 10:34
  • 123

全面掌握C#中的拖放操作

随着桌面系统的推出,利用鼠标的拖放(Drag and Drop)操作由于其简单、直接,受到了越来越多的读者的欢迎,为迎合这种趋势,越来越多程序员在自己的程序中使用了拖放操作。拖放操作方便了程序的使用者...
  • ILOVEMSDN
  • ILOVEMSDN
  • 2006年12月26日 17:55
  • 1179

C# 窗体拖拽文件类型判断

private void Form1_DragEnter(object sender, DragEventArgs e)         {             //如果拖进来的是...
  • u013628121
  • u013628121
  • 2016年09月16日 12:47
  • 614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#中的拖放操作 (转载)
举报原因:
原因补充:

(最多只允许输入30个字)