C# 树形控件节点拖动

在C#环境下实现树形控件节点的拖动。废话不多说先上图。

拖动选中的节点。然后释放。

拖动部分的代码:

首先把树形控件和面板的属性AllowDrop改为True。
树形控件的ItemDrag事件:
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
DoDragDrop(e.Item, DragDropEffects.Move);
isMouseDown
= true;
}
}
树形控件的DragEnter事件:
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
if (isMouseDown)
{
e.Effect
= DragDropEffects.Move;
}
else
{
e.Effect
= DragDropEffects.None;
}
}
树形控件的DragDrop事件
private void treeView1_DragDrop(object sender, DragEventArgs e)
{
TreeNode moveNode
= (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
//根¨´据Y鼠º¨®标À¨º坐Á?标À¨º确¨¡¤定¡§要°a移°?动¡¥到Ì?的Ì?目?标À¨º节¨²点Ì?
Point pt;
TreeNode targeNode;
pt
= ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
targeNode
= this.treeView1.GetNodeAt(pt);
}
Panel2面板(容器)控件的DragEnter事件
private void panel2_DragEnter(object sender, DragEventArgs e)
{
if (isMouseDown)
e.Effect
= DragDropEffects.Move;
else
e.Effect
= DragDropEffects.None;
}
PnlView面板(浏览区域)的DragEnter事件
private void PnlView_DragEnter(object sender, DragEventArgs e)
{
if (isMouseDown)
e.Effect
= DragDropEffects.Move;
else
e.Effect
= DragDropEffects.None;
}
PnlView面板(浏览区域)的DragDrop事件
private void PnlView_DragDrop(object sender, DragEventArgs e)
{
Position.X
= e.X;
Position.Y
= e.Y;
Position
= PnlView.PointToClient(Position);
GetPointWindow(Position, ViewCount);
//获取停留的窗口PS:这个自己定义。
}

posted on 2011-08-08 19:05  静幽独白  阅读(1800)  评论(0编辑  收藏  举报

导航