在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:这个自己定义。 }
|
请发表评论