C# TreeView 拖拽节点到另一个容器Panel中简单实现
用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊。特地写一篇博客记录下,分享给大家!也方便以后自己查看。
1.拖拽功能分析
拖拽功能分析其实就三个字:选-->拖-->放 什么意思,请看下图
本图大概就是将左侧TreeView中的节点拖拽到右侧的Panel控件中,然后根据业务处理想要的效果
拖拽过程分为三步:
- 将左侧的TreeView的节点选中
- 拖拽选中的节点
- 放入右侧panel容器中
2.拖拽用到的事件以及属性
对于TreeView控件需要监听:
- ItemDrag 事件(当用户开始拖动节点时发生)。
对于Panel控件:
- 开启Panel的AlowDrop属性设置为true 表示允许进行拖入操作
DragEnter事件 在将对象拖入控件的边界时发生。
- DragDrop事件 在完成拖放操作时发生。
3.代码实现
这里拖入完成后的位置随便写的,自己研究吧!
private void OnTreeView1ItemDrag(object sender, ItemDragEventArgs e)
{
IDataObject data = new DataObject(); data.SetData("Test", e.Item); //开始拖放操作
this.DoDragDrop(data, DragDropEffects.Copy);
} private void OnPanel1DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("Test"))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
} private void OnPanel1DragDrop(object sender, DragEventArgs e)
{
object item = e.Data.GetData("Test"); TreeNode node = (TreeNode)item;
Label label = new Label(); this.panel1.Controls.Add(label); label.AutoSize = true;
label.Location = new System.Drawing.Point(e.X - this.treeView1.Width - this.panel1.Location.X, e.Y - this.panel1.Location.Y);
label.Name = node.Name;
label.Size = new System.Drawing.Size(, );
label.TabIndex = ;
label.Text = node.Name; }
4.程序运行效果
实际上VS本身的工具箱应该都很熟悉,平时拖拽一个按钮控件等,就是这个拖拽