C#之四十一 在Winform中从外部拖动节点到树形结构
【摘要】
在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。 我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"...
-
在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。
-
我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。
-
实现代码如下:
-
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 }
文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。
原文链接:aaaedu.blog.csdn.net/article/details/51558782
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)