TreeView控件中实现拖拽的功能
//当用户开始拖动节点时
private void tvModel_ItemDrag(object sender, ItemDragEventArgs e)
{
TreeNode selectNode = e.Item as TreeNode;
this.tvModel.SelectedNode = selectNode;
this.form.DoDragDrop(e.Item, DragDropEffects.Move);
}
//将对象拖入控件的边界时
private void tvModel_DragEnter(object sender, DragEventArgs e)
{
TreeNode enterNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
if (enterNode != null)
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
//在完成拖放操作时
private void tvModel_DragDrop(object sender, DragEventArgs e)
{
TreeNode selectNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
//0.如果选择源为空 或者不是二级节点则退出
if (selectNode == null || selectNode.Level != 1)
return;
//1.根据鼠标坐标获得目标节点
Position.X = e.X;
Position.Y = e.Y;
Position = this.tvModel.PointToClient(Position);
TreeNode targetNode = this.tvModel.GetNodeAt(Position);
foreach (TreeNode node in this.tvModel.Nodes[0].Nodes)
node.NodeFont = new Font(this.form.Font, FontStyle.Regular);
//2.获得要插入的目标节点索引
int index = 0;
if (targetNode == null)
index = selectNode.Parent.Nodes.Count - 1; //目标节点为null, 直接插入到最后
else if (targetNode.Level == 1)
index = targetNode.Index + 1; //目标节点为同级, 直接在之后插入
else if (targetNode.Level == 0)
index = 0; //目标为根节点, 直接插入到最前
else if (targetNode.Level > 1)
{ //目标节点为二级节点以后, 遍历到其二级节点
while (targetNode.Level > 1)
targetNode = targetNode.Parent;
index = index = targetNode.Index + 1;
}
//3.源节点删除, 目标节点在索引出插入, 并高亮选中
selectNode.Remove();
this.tvModel.Nodes[0].Nodes.Insert(index, selectNode);
this.tvModel.SelectedNode = selectNode;
}
//将对象拖过控件边缘时
private void tvModel_DragOver(object sender, DragEventArgs e)
{
Position.X = e.X;
Position.Y = e.Y;
Position = this.tvModel.PointToClient(Position);
//在拖过的控件前后显示划线效果
TreeNode targetNode = this.tvModel.GetNodeAt(Position);
if (targetNode != null && targetNode.Level == 1)
{
if (targetNode.PrevNode != null)
targetNode.PrevNode.NodeFont = new Font(this.form.Font, FontStyle.Regular);
if (targetNode.NextNode != null)
targetNode.NextNode.NodeFont = new Font(this.form.Font, FontStyle.Regular);
targetNode.NodeFont = new Font(this.form.Font, FontStyle.Underline);
}
}
#endregion
TreeView控件中实现拖拽的功能相关推荐
- 递归遍历文件夹,并添加到TreeView控件中
遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...
- WPF 在image控件用鼠标拖拽出矩形
今天有小伙伴问我一个问题,在image控件用鼠标拖拽出矩形,本文告诉大家如何使用鼠标画出矩形 做出来的效果先请大家看一下 最简单的方法是在 Down 的时候记录按下的点,在 移动的时候重新计算所在的宽 ...
- 自定义treeview控件,实现右键菜单编辑功能
试过用复合控件包含treeview控件,但是失败,这次在右键菜单调用tree的回发js成功可以在页面后台绑定被编辑的节点,后台3个函数都可以编辑用c#传的参数e.mynode就是右键菜单的选中的节点 ...
- ASP.Net中的TreeView控件中对节点的上移和下移操作
Web中的TreeView中的没有PreNode和NextNode属性. 但它的集合属性中有一个IndexOf属性,从而能够找到它的前一个节点知后一个节点. TreeView中要么只有一个根节点:要么 ...
- 在 TreeView 控件中显示分层数据
1.在web.config文件中创建以下数据库连接字符串 <connectionStrings> <add name="NorthwindConnectio ...
- MFC中窗口实现拖拽文件功能
MFC窗口拖拽文件功能指的是用鼠标将文件拖拽入窗口后,在窗口中可以获取拖拽文件的绝对路径,如图1所示. 图1 文件拖拽功能 实现窗口的拖拽文件功能,首先要将窗口注册为放置拖拽文件的目标,之后在窗口中响 ...
- C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标
在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...
- matlab treeview,treeview控件
高分在线等:C#中如何给treeview控件上的节点前添比如有一treeview1控件,需要在其所有节点前均加一静态小图标(所有节点我也新手,正好刚用过这功能.如下: 1. 到工具箱中拖一个image ...
- 给TreeView控件绑定数据
TreeView控件显示Node对象的等级体系结构,每个Node对象包含了一个标签和可选的点位图.TreeView控件通常用于显示文档头.索引中的条目.磁盘上的文件和目录或者可以显示为等级结构的各种其 ...
最新文章
- 【 全干货 】5 分钟带你看懂 Docker !
- ImageView 缩放
- 二叉搜索树简介和部分题目
- 如何搭建和使用 Xcode 开发环境
- python赋值浅拷贝和深拷贝的区别_浅拷贝、深拷贝和普通赋值操作有什么区别?...
- java String.intern();
- vba编写的出库单(可添加出库项目记录、生成、打印出库单)
- arcgis api for js绘制箭头图
- 百变鹏仔缤纷彩色文字广告位代码美化版
- MySQL InnoDB 锁
- mmsegmentation 训练自制数据集全过程
- 广州移动华为认证培训之行
- 【PP系列】SAP PP模块工作中心主数据维护
- 基于51单片机的EEPROM读写
- MySQL 技术内幕——存储引擎
- PHP7如何从摆地摊 到实现大神梦想
- uni-app接入高德地图SDK实现定位用户城市
- 4万高考冒名顶替事件_山东高考冒名顶替事件后续, 人民日报第一时间亮明态度!...
- crc32算法简单理解
- [转]创业Web2.0之客齐集王建硕:互联网,我醉我做