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.程序源代碼

源代碼工程文件下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM