当前位置导航:炫浪网>>网络学院>>编程开发>>Visual C#教程

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

概要 
快速实现在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对象删除掉。 
通过以下几步创建实例程序: 
1. 
创建C# Windows应用程序 
 
2. 
界面增加一个TreeView控件 
 
3. 
设置TreeView的AllowDrop属性设置为True 
 
4. 
Page_Load方法中增加如下代码:
 
 
private void Form1_Load(object sender, System.EventArgs e) 
              { 
// TreeView控件增加一些测试节点 
                    TreeNode ParentNode1; 
                    ParentNode1 = treeView1.Nodes.Add("tv1"); 
                    ParentNode1.Nodes.Add("tv1FirstChild"); 
                    ParentNode1.Nodes.Add("tv1SecondChild"); 
                    ParentNode1.Nodes.Add("tv1ThirdChild"); 
                    ParentNode1.Nodes.Add("tv1FourthChild"); 
                    ParentNode1.Expand(); 
 
// TreeView控件增加事件 
                    this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); 
                    this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter); 
                    this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop); 
              } 
 
5. 
//treeView_ItemDrag 事件代码:
 
private void treeView_ItemDrag(object sender, 
                    System.Windows.Forms.ItemDragEventArgs e) 
              { 
                    DoDragDrop(e.Item, DragDropEffects.Move); 
              } 
 
6. 
// treeView_DragEnter事件代码:
 
private void treeView_DragEnter(object sender, 
                    System.Windows.Forms.DragEventArgs e) 
              { 
                    e.Effect = DragDropEffects.Move; 
              } 
 
7. 
 
// treeView_DragDrop事件代码: 
private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
              { 
                    TreeNode NewNode; 
 
                    if(e.Data.GetDataPresent(typeof(TreeNode))) 
                    { 
                            Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y)); 
                            TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt); 
                            NewNode = (TreeNode)e.Data.GetData

("System.Windows.Forms.TreeNode"); 
                            DestinationNode.Nodes.Add((TreeNode) NewNode.Clone()); 
                            DestinationNode.Expand(); 
                            //删除已经移动的节点 
                            NewNode.Remove(); 
                    } 
              } 
 

相关内容
赞助商链接