winform 两个TreeView间拖拽节点
/// <summary>
/// 正在拖拽的节点
/// </summary>
private TreeNode DragNode = null;
/// <summary>
/// 节点来源
/// </summary>
private TreeView NodeSource = null;
/// <summary>
/// 树形节点移动方向
/// </summary>
private MoveTreeView MoveTo = MoveTreeView.NoMove; /// <summary>
/// 当鼠标拖拽某相进入控件区域内时
/// </summary>
private void TreeView_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
} /// <summary>
/// 当鼠标拖拽某节点时(两个控件的该事件都指向这个方法)
/// </summary>
private void TreeView_ItemDrag(object sender, ItemDragEventArgs e)
{
if (e.Item is TreeNode && e.Button == System.Windows.Forms.MouseButtons.Left &&
e.Item != null && sender is TreeView)
{
TreeView trv = sender as TreeView;
TreeNode node = e.Item as TreeNode;
if (node.Parent != null && trv.Tag != null)
{
int value = Convert.ToInt32(trv.Tag);
MoveTo = (MoveTreeView)value;
DragNode = node;
NodeSource = trv;
trv.DoDragDrop(node, DragDropEffects.Move);
}
}
} /// <summary>
/// 拖拽完成时发生的事件(两个控件的该事件都指向这个方法)
/// </summary>
private void TreeView_DragDrop(object sender, DragEventArgs e)
{
if (sender != null && sender is TreeView)
{
TreeView trv = sender as TreeView;
if (trv.Tag != null)
{
MoveTreeView move = (MoveTreeView)Convert.ToInt32(trv.Tag);
if (move == MoveTo) { DragNode = null; NodeSource = null; }
else
{
Point p = trv.PointToClient(new Point(e.X, e.Y));
TreeNode node = trv.GetNodeAt(p);
string path = GetClientPath(DragNode, DragNode.Text);
NodeSource.Nodes.Remove(DragNode);
node.Nodes.Add(DragNode);
}
}
}
} /// <summary>
/// 属性节点移动方向
/// </summary>
public enum MoveTreeView
{
/// <summary>
/// 未移动
/// </summary>
NoMove = -,
/// <summary>
/// 上传(客户端拖拽到服务器端)
/// </summary>
ClientToServer = ,
/// <summary>
/// 下载(服务器端拖拽到客户端)
/// </summary>
ServerToClient =
}
首先要将 TreeView 控件的 AllowDrop 属性置为 True
winform 两个TreeView间拖拽节点的更多相关文章
- C# TreeView 拖拽节点到另一个容器Panel中简单实现
C# TreeView 拖拽节点到另一个容器Panel中简单实现 用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊.特地写一篇博 ...
- winform上控件的拖拽小结
这里罗列出几个相关的事件和属性,具体的实现介绍已有非常优秀的文章了,文章末尾我将会给出,大家可以去参考. 属性: AllowDrop: 目标控件必须设定为true,才能接受拖拽来的东西. 事件: It ...
- WPF 实现控件间拖拽内容
想实现这样一个常用功能:在ListBox的一个Item上点住左键,然后拖拽到另外一个控件(如ListView中),松开左键,数据已经拖拽过来. 步骤如下: 1. 设置ListBox 的AllowDro ...
- winform中文本框添加拖拽功能
对一个文本框添加拖拽功能: private void txtFolder_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataP ...
- 让您的WinForm控件快速支持拖拽文件
实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...
- 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界
1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...
- HT for Web列表和3D拓扑组件的拖拽应用
很多可视化编辑器都或多或少有一些拖拽功能,比如从一个List列表中拖拽一个节点到拓扑组件上进行建模,并且在拖拽的过程中鼠标位置下会附带一个被拖拽节点的缩略图,那么今天我们就来实现这样的拖拽效果. 首先 ...
- sortable.js 拖拽排序及配置项说明
// 拖动排序 $(function() { /*排序*/ //排序 // Simple list ]; new Sortable(list, { group: "name", a ...
- html5 Sortable.js 拖拽排序源码分析
最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 本帖属于原创,转载请出名出处. 官网http:// ...
随机推荐
- 自助用户选择VM Network
在VMM中为用户所属角色分配“作者VM网络”权限后,用户才可以在部署虚机的选择不同的VM Network,否则用户只能使用模板上所使用的VM Network,无法进行选择
- C++中的类访问控制
C++中 public,protected, private 访问标号小结 第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2 ...
- 分布式数据库中间件–(3) Cobar对简单select命令的处理过程
友情提示:非原文链接可能会影响您的阅读体验,欢迎查看原文.(http://blog.geekcome.com) 原文地址:http://blog.geekcome.com/archives/284 在 ...
- java的定时器用法
java定时器的使用 定时器类Timer在java.util包中.使用时,先实例化,然后使用实例的schedule(TimerTask task, long delay)方法,设定指定的任务task在 ...
- 启动列表的activity
每学一个知识点就要重新创建一个项目,感觉那样太繁琐了,特别是android studio开发,没创建一个项目都会重新打开一个窗口 所以我就在那想,何不有一个功能列表,点击每一个列表项的时候就跳转到那个 ...
- RHCA442学习笔记-Unit11内存回收
Unit 12 Memory Reclamation 内存回收 学习目标: A. 了解和调整内存回收 ...
- Percona-toolkit的安装和配置-杨建荣的学习笔记
http://blog.itpub.net/23718752/viewspace-2091818/#rd
- C# - 系统类 - Object类
Object类 ns:System 此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为 ...
- schedule() 和 scheduleAtFixedRate() 的区别--转载
1. schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...
- The Tangled Web (Web之困)第四章 摘要
1. HTML语法: 由Tag组成层级结构,标签视为名,而值插在当中. 关键组成符:<, >, ', ", & 2. 解析模式: 文件开头<!DOCTYPE> ...