在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)

最近一个项目要用到从listview向treeview拖动item,达到从外部拖动图标成为树形结构的一部分,通过查阅资料总结了一些实现方式,分享给大家。这是winform中的例子。

 

     在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。  
     我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。

     实现代码如下:

    

 1    private   void  listView1_ItemDrag( object  sender, System.Windows.Forms.ItemDragEventArgs e)
 2          {
 3               this .DoDragDrop(e.Item,DragDropEffects.Move);
 4          }
 5 
 6           private   void  listView1_DragEnter( object  sender, System.Windows.Forms.DragEventArgs e)
 7          {
 8              e.Effect = DragDropEffects.Move;
 9          }
10 
11           private   void  treeView1_DragEnter( object  sender, System.Windows.Forms.DragEventArgs e)
12          {
13               // 判定是否现在拖动的数据是LISTVIEW项
14              ListViewItem lvi  =  (ListViewItem)e.Data.GetData( typeof (ListViewItem)); 
15               if  (lvi  !=   null
16              { 
17                  e.Effect  =  DragDropEffects.Move; 
18              } 
19               else  
20                  Cursor  =  Cursors.No; 
21 
22          }
23           private   void  treeView1_DragDrop( object  sender, System.Windows.Forms.DragEventArgs e)
24          {
25               // 获得拖放中的项
26              ListViewItem lvi  =  (ListViewItem)e.Data.GetData( typeof (ListViewItem)); 
27 
28               // 根据鼠标坐标确定要移动到的目标节点
29              Point pt;
30              TreeNode targeNode;
31              pt  =  ((TreeView)(sender)).PointToClient( new  Point(e.X, e.Y));
32              targeNode  =   this .treeView1.GetNodeAt(pt);
33              TreeNode NewMoveNode   = new  TreeNode(lvi.Text);
34               if (targeNode != null ) // 如果目标节点未选中,则添加到一级节点
35              {
36                  targeNode.Nodes.Add(NewMoveNode);
37                   // 更新当前拖动的节点选择
38                  treeView1.SelectedNode  =  NewMoveNode;
39                   // 展开目标节点,便于显示拖放效果
40                  targeNode.Expand();
41                  treeView1.Refresh();
42              }
43               else
44              {
45                   this .treeView1.Nodes.Add(NewMoveNode);
46                   // 更新当前拖动的节点选择
47                  treeView1.SelectedNode  =  NewMoveNode;
48                   // 展开目标节点,便于显示拖放效果
49                  treeView1.ExpandAll();
50                  treeView1.Refresh();
51              }
52 
53              
54          }

 

 最后不要忘记添加相应的事件!

这样就可以实现简单的从外部拖动节点到树形结构中了。关于插入图片在下一篇文章中介绍。

 

转载于:https://www.cnblogs.com/kyle_zhao/archive/2009/12/25/1631943.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值