C#文件拖放操作(DragDrop File)

来源:互联网 发布:deepin linux开3d特效 编辑:程序博客网 时间:2024/05/21 06:00
C#文件拖放操作(DragDrop File)
转自:http://www.csframework.com/archive/1/arc-1-20110817-1799.htm

首先将窗体的 AllowDrop=True;

C# Code:

//拖文件到窗体上触发DragEnter事件
private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
   if (e.Data.GetDataPresent(DataFormats.FileDrop))
   e.Effect = DragDropEffects.Link;
   else e.Effect = DragDropEffects.None;
}

//松开鼠标左键触发DragDrop事件
private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
   //其中 label1.Text显示的就是拖进文件的文件名;
   label1.Text = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();
}


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

(1).开始"拖"(Drag)操作:

通过"DoDragDrop"方法拉开了拖放操作的第一步。"DoDragDrop"方法的语法为:
DoDragDrop ( object data , DragDropEffects allowedEffects ) ;

其中第二个参数来是说明此次拖放操作最后所要实现的效果,因为拖放操作有时实现的效果是把源组件中的内容"拖"到目标组件中,这种效果就是 "Move";有时拖放的效果是在目标组件中加入拖动的数据,对源组件的内容是没有什么影响的,这种效果就是"Copy"。

当然无论是"Move"还是 "Copy",这都要通过具体的编程来实现,设定这些效果只是告诉操作系统,你进行拖放操作的类型,从而为拖放操作设定特定的图标。此例中实现开始"拖放 "操作的具体实现代码如下:

C# Code:


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



 

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

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

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

C# Code:


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




 

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

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

C# Code:


private void listView1_DragDrop (object sender , DragEventArgs e )
{
   string dummy = "temp" ;
   //获得进行"Drag"操作中拖动的字符串
   string s = ( string ) e.Data.GetData ( dummy.GetType ( ) ) ;
   s = 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 组件的拖放操作。





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 办分期的卡丢了怎么办 房贷银行卡掉了怎么办 房贷银行卡丢了怎么办? 行驶证丢了怎么办补办 行驶证丢了怎么办异地 浦发信用卡盗刷怎么办 苹果id被盗变砖怎么办 信用卡丢了被刷怎么办 ins注册不了怎么办安卓 偷玩电脑被发现怎么办 做作业不认真的怎么办 老人脑供血不足怎么办 哺乳期吃了辣的怎么办 孕32周胎位臀位怎么办 怀孕32周胎位不正怎么办 7个月胎位不正怎么办 胎心监护老不过怎么办 8个月了胎位不正怎么办 怀孕八个月了胎位不正怎么办 怀孕八个月胎位不正怎么办 欠债的人跑了怎么办 赌博输了100万怎么办 我赌博输了4万怎么办 办80张信用卡怎么办的 19岁负债十几万怎么办 欠了十几万该怎么办 网贷负债十几万怎么办 赌博欠了十几万怎么办 欠了网贷跑了会怎么办 欠银行钱还不起怎么办 欠小额贷款公司的钱还不上怎么办 负债30万没工作怎么办 华为p9耗电太快怎么办 酷派手机反应慢怎么办 网上买手机被骗了怎么办 买手机贵了怎么办12315 在手机店被骗了怎么办 在转转上被骗了怎么办 微信被骗了800怎么办 苹果6被偷走该怎么办 苹果7被偷走该怎么办