C#之四十一 在Winform中从外部拖动节点到树形结构

举报
tea_year 发表于 2021/12/29 22:57:51 2021/12/29
【摘要】 在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。 我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"...

  
  1. 在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。
  2. 我们会用到三种事件:"ItemDrag""DragEnter""DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。
  3. 实现代码如下:
  4. private void listView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
  5. 2 {
  6. 3 this.DoDragDrop(e.Item,DragDropEffects.Move);
  7. 4 }
  8. 5
  9. 6 private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
  10. 7 {
  11. 8 e.Effect=DragDropEffects.Move;
  12. 9 }
  13. 10
  14. 11 private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
  15. 12 {
  16. 13 //判定是否现在拖动的数据是LISTVIEW项
  17. 14 ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
  18. 15 if (lvi != null)
  19. 16 {
  20. 17 e.Effect = DragDropEffects.Move;
  21. 18 }
  22. 19 else
  23. 20 Cursor = Cursors.No;
  24. 21
  25. 22 }
  26. 23 private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
  27. 24 {
  28. 25 //获得拖放中的项
  29. 26 ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
  30. 27
  31. 28 //根据鼠标坐标确定要移动到的目标节点
  32. 29 Point pt;
  33. 30 TreeNode targeNode;
  34. 31 pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
  35. 32 targeNode = this.treeView1.GetNodeAt(pt);
  36. 33 TreeNode NewMoveNode =new TreeNode(lvi.Text);
  37. 34 if(targeNode!=null)//如果目标节点未选中,则添加到一级节点
  38. 35 {
  39. 36 targeNode.Nodes.Add(NewMoveNode);
  40. 37 //更新当前拖动的节点选择
  41. 38 treeView1.SelectedNode = NewMoveNode;
  42. 39 //展开目标节点,便于显示拖放效果
  43. 40 targeNode.Expand();
  44. 41 treeView1.Refresh();
  45. 42 }
  46. 43 else
  47. 44 {
  48. 45 this.treeView1.Nodes.Add(NewMoveNode);
  49. 46 //更新当前拖动的节点选择
  50. 47 treeView1.SelectedNode = NewMoveNode;
  51. 48 //展开目标节点,便于显示拖放效果
  52. 49 treeView1.ExpandAll();
  53. 50 treeView1.Refresh();
  54. 51 }
  55. 52
  56. 53
  57. 54 }

文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/51558782

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。