/// <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. [二]poi实践一

    1.创建时间格式的cell 2.创建不同格式的cell(字符串.布尔.数值) 3.读取遍历xls文件 4.抽取excel的内容

  2. WEB API 用MemoryStream流做下载功能

    刚开始把MemoryStream 放在 var streamResult = new MemoryStream(); HttpResponseMessage response = new HttpRe ...

  3. PAT 1034. Head of a Gang (30)

    题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1034 此题考查并查集的应用,要熟悉在合并的时候存储信息: #include <iostr ...

  4. DoctorNote医生处方笔记开发记录

    1.开发背景 一个开诊所的中医朋友,希望我能给他开发一个记录病人姓名和处方的Android手机app,以便查询病人每次就诊信息,比如上一次的处方,以前他要找个病人上一次的就诊处方,几乎要翻遍一叠厚厚的 ...

  5. eclipse mybatis Generator

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

  6. 【转】oracle创建表空间

    原文:http://www.cnblogs.com/netsql/articles/1745978.html 注意点: 1.如果在PL/SQL 等工具里打开的话,直接修改下面的代码中[斜体加粗部分]执 ...

  7. spring scheduler相同时间内执行两次的问题

    在网上找了大片文章,有的说是上下文被夹在两次的问题,可我配置scheduler的上下文着实没被夹在多次 之后才在网上找到,虽然还不明白原理,但是还是贴出来分享下

  8. Android框架浅析之锁屏(Keyguard)机制原理

    最近终于成功的摆脱了FM收音机,迈向了新的模块:锁屏.状态栏.Launcher---姑且称之为“IDLE”小组,或许叫手机 美容小组,要是能施展下周星星同学的还我漂漂拳,岂不快哉. OK,闲话打住,咱 ...

  9. cocos2d-x 3.0 Armature jsb 初体验

    有段时间没有写游戏代码了,这回来主要任务是要用jsb构建一个aprg动作游戏,看到3.0官方已经绑定好了armature的js函数,先来体验一把 3.0新建项目比2.2方便了很多,在终端运行tools ...

  10. Bash For Loop Examples for Your Linux Shell Scripting--ref

    There are two types of bash for loops available. One using the “in” keyword with list of values, ano ...