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

简介: C#之四十一 在Winform中从外部拖动节点到树形结构
在进行拖放操作之前,必须要对进行拖放操作的组件的"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         }
目录
相关文章
|
6月前
|
C#
C# WinForm发送Email邮件
C# WinForm发送Email邮件
C# WinForm发送Email邮件
|
2月前
|
SQL API 定位技术
基于C#使用winform技术的游戏平台的实现【C#课程设计】
本文介绍了基于C#使用WinForms技术开发的游戏平台项目,包括项目结构、运行截图、实现功能、部分代码说明、数据库设计和完整代码资源。项目涵盖了登录注册、个人信息修改、游戏商城列表查看、游戏管理、用户信息管理、数据分析等功能。代码示例包括ListView和ImageList的使用、图片上传、图表插件使用和SQL工具类封装,以及高德地图天气API的调用。
基于C#使用winform技术的游戏平台的实现【C#课程设计】
|
25天前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
|
1月前
|
API C# Windows
【C#】在winform中如何实现嵌入第三方软件窗体
【C#】在winform中如何实现嵌入第三方软件窗体
67 0
|
1月前
|
API C#
C#实现Winform程序右下角弹窗消息提示
C#实现Winform程序右下角弹窗消息提示
77 0
|
3月前
|
关系型数据库 Java MySQL
C#winform中使用SQLite数据库
C#winform中使用SQLite数据库
185 3
C#winform中使用SQLite数据库
|
3月前
|
数据库
C#Winform使用NPOI获取word中的数据
C#Winform使用NPOI获取word中的数据
177 2
|
6月前
|
C# 开发者
35.c#:winform窗口
35.c#:winform窗口
43 1
|
6月前
|
JavaScript C#
C#winForm程序与html JS交互调用
C#winForm程序与html JS交互调用
|
6月前
|
C#
C# Winform 选择文件夹和选择文件
C# Winform 选择文件夹和选择文件
86 0