熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

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

2013-11-13 09:44:48  來源: .NET編程 

概要 
快速實現在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(); 
                    } 
              } 
 


From:http://tw.wingwit.com/Article/program/net/201311/11471.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.