1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > C#实现树型结构TreeView节点拖拽的简单功能(转)

C#实现树型结构TreeView节点拖拽的简单功能(转)

时间:2018-10-16 02:54:07

相关推荐

C#实现树型结构TreeView节点拖拽的简单功能(转)

本文摘抄博客园里面的牛人吉日嘎啦。/jirigala

例子程序运行效果如何下:

当然在节点拖拽时,需要注意几个事情:

1:拖拽时总需要有提示信息比较好,防止误操作后找不到被托摘到哪里去了。

2:父亲节点总不能拖拽到自己的子节点上,那不是死循环或者乱了辈份了不是?

为了让TreeView支持拖拽功能,需要注意以下几个属性设置及相应的事件代码。

代码实现参考如下:

privatevoidtvOrganize_ItemDrag(objectsender,ItemDragEventArgse)

{

if(this.permissionEdit)

{

//开始进行拖放操作,并将拖放的效果设置成移动。

this.DoDragDrop(e.Item,DragDropEffects.Move);

}

}

privatevoidtvOrganize_DragEnter(objectsender,DragEventArgse)

{

//拖动效果设成移动

e.Effect=DragDropEffects.Move;

}

privatevoidtvOrganize_DragDrop(objectsender,DragEventArgse)

{

//定义一个中间变量

TreeNodetreeNode;

//判断拖动的是否为TreeNode类型,不是的话不予处理

if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode",false))

{

//拖放的目标节点

TreeNodetargetTreeNode;

//获取当前光标所处的坐标

//定义一个位置点的变量,保存当前光标所处的坐标点

Pointpoint=((TreeView)sender).PointToClient(newPoint(e.X,e.Y));

//根据坐标点取得处于坐标点位置的节点

targetTreeNode=((TreeView)sender).GetNodeAt(point);

//获取被拖动的节点

treeNode=(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

//判断拖动的节点与目标节点是否是同一个,同一个不予处理

if(BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode,targetTreeNode))

{

if(BaseSystemInfo.ShowInformation)

{

//是否移动部门

if(MessageBox.Show(AppMessage.Format(AppMessage.MSG0038,treeNode.Text,targetTreeNode.Text),AppMessage.MSG0000,MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.No)

{

return;

}

}

anizeService.MoveTo(UserInfo,treeNode.Tag.ToString(),targetTreeNode.Tag.ToString());

//往目标节点中加入被拖动节点的一份克隆

targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());

//将被拖动的节点移除

treeNode.Remove();

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。