/// <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间拖拽节点的更多相关文章

  1. C# TreeView 拖拽节点到另一个容器Panel中简单实现

    C# TreeView 拖拽节点到另一个容器Panel中简单实现 用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊.特地写一篇博 ...

  2. winform上控件的拖拽小结

    这里罗列出几个相关的事件和属性,具体的实现介绍已有非常优秀的文章了,文章末尾我将会给出,大家可以去参考. 属性: AllowDrop: 目标控件必须设定为true,才能接受拖拽来的东西. 事件: It ...

  3. WPF 实现控件间拖拽内容

    想实现这样一个常用功能:在ListBox的一个Item上点住左键,然后拖拽到另外一个控件(如ListView中),松开左键,数据已经拖拽过来. 步骤如下: 1. 设置ListBox 的AllowDro ...

  4. winform中文本框添加拖拽功能

    对一个文本框添加拖拽功能: private void txtFolder_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataP ...

  5. 让您的WinForm控件快速支持拖拽文件

    实现原理:使用扩展方法. /// <summary> /// 控件扩展 /// </summary> public static class ControlExt { /// ...

  6. 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界

    1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...

  7. HT for Web列表和3D拓扑组件的拖拽应用

    很多可视化编辑器都或多或少有一些拖拽功能,比如从一个List列表中拖拽一个节点到拓扑组件上进行建模,并且在拖拽的过程中鼠标位置下会附带一个被拖拽节点的缩略图,那么今天我们就来实现这样的拖拽效果. 首先 ...

  8. sortable.js 拖拽排序及配置项说明

    // 拖动排序 $(function() { /*排序*/ //排序 // Simple list ]; new Sortable(list, { group: "name", a ...

  9. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

随机推荐

  1. jquery判断文本域长度

    <div id="result">您还可以输入100字</div> <textarea name="content" id=&qu ...

  2. C#Winform窗口特效源码(1)

    本文基于.Net开发,使用C#作为开发语言,分别包含以下效果: 移动无边框窗口.窗口移动限制(限制在屏幕内).桌面贴边自动隐藏(仿QQ隐藏窗口) 1.移动无边框窗口 采用了消息的方式,可以实现通过窗口 ...

  3. MongoDB--使用修改器修改文档

    可以使用修改器啦修改文档,比如增加.删除文档的键值.使用修改器首先要定位到某个文档, 然后再增加相应的修改选项,需要使用update语句 1.$inc修改器修改文档 > db.users.fin ...

  4. Script Form

    Script Form 是SAP所提供的一款强大的报表设设计工具. 一.Script Form主要工具包括如下: 1)Form Painter:格式绘制器,用于格式的设定.TCoce:SE71. 2) ...

  5. AMQP与QPID简介

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  6. 读书笔记-详解C程序开发中 .c和.h文件的区别

    一个简单的问题:.c和.h文件的区别 学了几个月的C语言,反而觉得越来越不懂了.同样是子程序,可以定义在.c文件中,也可以定义在.h文件中,那这两个文件到底在用法上有什么区别呢? 2楼: 子程序不要定 ...

  7. Java基础知识强化之IO流笔记41:字符流缓冲流之复制文本文件案例02(使用 [ newLine() / readLine() ] )(重要)

    1. 使用字符流缓冲流的特殊功能 [ newLine() / readLine() ] 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中  数据源: a.txt -- 读取数据 ...

  8. 关于调用系统照相机Activity被销毁问题解决

    <activity                  android:name=".visitplan_finish"                  android:co ...

  9. js 字符串编码转换函数

    escape 方法 对 String 对象编码以便它们能在所有计算机上可读, escape(charString) 必选项 charstring 参数是要编码的任意 String 对象或文字. 说明 ...

  10. jqery基础知识

    选择器按属性,子元素,表单匹配元素 <!doctype html> <html lang="en"> <head> <meta chars ...