电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

在Windows应用程序中支持拖拽的TreeView控件


发布日期:2019/7/27
 

概要

快速实现在Windows应用程序中支持拖拽的TreeView控件

技术描述

TreeView已经提供了支持拖拽的事件

&#;

ItemDrag: 用户拖拽TreeNode时触发当它发生时调用DoDragDrop方法初始化拖拽过程

&#;

DragEnter: 在你初始化拖拽操作后你必须处理目标TreeView控件的DragEnter事件 这个事件发生在用户拖拽TreeNode对象从TreeView控件到目标控件范围点内DragEnter事件能够指定目标TreeView控件无论拖拽操作对这个控件是否用代码中仅仅是移动操作

&#;

DragDrop: 最后是要处理目标TreeView的DragDrop事件这个事件发生在用户推拽TreeNode对象并释放到目标控件中处理这个事件 返回TreeNode对象并添加到目标TreeView控件上代码中用Data对象返回

以下代码实现一个TreeView控件上拖拽任意节点到指定节点上也可以自己扩展为多个TreeView控件间TreeNode相互拖拽的程序Data对象的GetData方法返回被拖拽的TreeNode对象GetNodeAt方法用来确定这个TreeNode对象拖拽到的目标控件(这里就是目标TreeNode对象)在确定位置之后把源TreeNode对象添加到目标TreeNode对象下面作为其子结点因为是移动操作因此最后会把源TreeNode对象删除掉

通过以下几步创建实例程序

创建C# Windows应用程序

界面增加一个TreeView控件

设置TreeView的AllowDrop属性设置为True

Page_Load方法中增加如下代码

private void Form_Load(object sender SystemEventArgs e)

{

// TreeView控件增加一些测试节点

TreeNode ParentNode;

ParentNode = treeViewNodesAdd(tv);

ParentNodeNodesAdd(tvFirstChild);

ParentNodeNodesAdd(tvSecondChild);

ParentNodeNodesAdd(tvThirdChild);

ParentNodeNodesAdd(tvFourthChild);

ParentNodeExpand();

// TreeView控件增加事件

thistreeViewItemDrag += new SystemWindowsFormsItemDragEventHandler(thistreeView_ItemDrag);

thistreeViewDragEnter += new SystemWindowsFormsDragEventHandler(thistreeView_DragEnter);

thistreeViewDragDrop += new SystemWindowsFormsDragEventHandler(thistreeView_DragDrop);

}

//treeView_ItemDrag 事件代码

private void treeView_ItemDrag(object sender

SystemWindowsFormsItemDragEventArgs e)

{

DoDragDrop(eItem DragDropEffectsMove);

}

// treeView_DragEnter事件代码

private void treeView_DragEnter(object sender

SystemWindowsFormsDragEventArgs e)

{

eEffect = DragDropEffectsMove;

}

// treeView_DragDrop事件代码

private void treeView_DragDrop(object sender SystemWindowsFormsDragEventArgs e)

{

TreeNode NewNode;

if(eDataGetDataPresent(typeof(TreeNode)))

{

Point pt = ((TreeView)sender)PointToClient(new Point(eX eY));

TreeNode DestinationNode = ((TreeView)sender)GetNodeAt(pt);

NewNode = (TreeNode)eDataGetData

(SystemWindowsFormsTreeNode);

DestinationNodeNodesAdd((TreeNode) NewNodeClone());

DestinationNodeExpand();

//删除已经移动的节点

NewNodeRemove();

}

}

上一篇:从Window系统托盘控制Windows服务

下一篇:使用ThreadStart委托来衍生三个新线程