1. 程式人生 > >C# TreeView 拖拽節點到另一個容器Panel中簡單實現

C# TreeView 拖拽節點到另一個容器Panel中簡單實現

C# TreeView 拖拽節點到另一個容器Panel中簡單實現

用了這麼久C#拖拽功能一直沒有用到也就沒用過,今天因為專案需要,領導特地給我簡單講解了下拖拽功能,真是的大師講解一點通啊。特地寫一篇部落格記錄下,分享給大家!也方便以後自己檢視。

1.拖拽功能分析

拖拽功能分析其實就三個字:選-->拖-->放  什麼意思,請看下圖

本圖大概就是將左側TreeView中的節點拖拽到右側的Panel控制元件中,然後根據業務處理想要的效果

拖拽過程分為三步:

  1. 將左側的TreeView的節點選中
  2. 拖拽選中的節點
  3. 放入右側panel容器中

2.拖拽用到的事件以及屬性

對於TreeView控制元件需要監聽:

  1.    ItemDrag 事件(當用戶開始拖動節點時發生)。

對於Panel控制元件:

  1. 開啟Panel的AlowDrop屬性設定為true  表示允許進行拖入操作
  2. DragEnter事件  在將物件拖入控制元件的邊界時發生。

  3. DragDrop事件 在完成拖放操作時發生。

3.程式碼實現

這裡拖入完成後的位置隨便寫的,自己研究吧!

 1         private void OnTreeView1ItemDrag(object sender, ItemDragEventArgs e)
2 { 3 IDataObject data = new DataObject(); 4 5 data.SetData("Test", e.Item); 6 7 //開始拖放操作 8 this.DoDragDrop(data, DragDropEffects.Copy); 9 } 10 11 private void OnPanel1DragEnter(object sender, DragEventArgs e)
12 { 13 if (e.Data.GetDataPresent("Test")) 14 e.Effect = DragDropEffects.Copy; 15 else 16 e.Effect = DragDropEffects.None; 17 } 18 19 private void OnPanel1DragDrop(object sender, DragEventArgs e) 20 { 21 object item = e.Data.GetData("Test"); 22 23 TreeNode node = (TreeNode)item; 24 Label label = new Label(); 25 26 this.panel1.Controls.Add(label); 27 28 label.AutoSize = true; 29 label.Location = new System.Drawing.Point(e.X - this.treeView1.Width - this.panel1.Location.X, e.Y - this.panel1.Location.Y); 30 label.Name = node.Name; 31 label.Size = new System.Drawing.Size(41, 12); 32 label.TabIndex = 0; 33 label.Text = node.Name; 34 35 }

4.程式執行效果

實際上VS本身的工具箱應該都很熟悉,平時拖拽一個按鈕控制元件等,就是這個拖拽

5.程式原始碼

原始碼工程檔案下載