c# TreeView拖拽问题 十万火急!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# TreeView拖拽问题 十万火急!!相关的知识,希望对你有一定的参考价值。

本人用C#做TreeView的节点拖拽
拖拽已经做好了,但是拖拽过程中要改变鼠标的图标样式,我试了好多事件,都不好用!
那位大侠有好的方法,请速速解救啊!

用timer加mousedown和mouseup事件来控制试试看
mousedown事件的时候激发timer事件进行计时,如果达到指定时间,将鼠标变样,在mouseup里还原鼠标样式.
参考代码:
private int flag; //用于时间计数

private void timer1_Tick(object sender, EventArgs e)

flag++;
if (flag >= 1) //鼠标左键按钮下1s后改变样式

timer1.Enabled = false;
//改变鼠标样式
MessageBox.Show("改变样式");



private void treeView1_MouseDown(object sender, MouseEventArgs e)

if (e.Button == MouseButtons.Left)

flag = 0;
timer1.Enabled = true;



private void treeView1_MouseUp(object sender, MouseEventArgs e)

if (e.Button == MouseButtons.Left && flag > 0)

timer1.Enabled = false;
//还原鼠标样式
MessageBox.Show("还原样式");

参考技术A 不好意思,mouseup事件有点小错误,需要修改为:
private void treeView1_MouseUp(object sender, MouseEventArgs e)

timer1.Enabled = false; //这句要放到外面
if (e.Button == MouseButtons.Left && flag > 0)

//还原鼠标样式
MessageBox.Show("还原样式");



这样就能实现只有按下左键一定时间才会变样,如果只是纯粹缩放节点是不响应鼠标变样事件的.
参考技术B private void treeView1_MouseDown(object sender, MouseEventArgs e)

this.Cursor = Cursors.WaitCursor;


private void treeView1_MouseUp(object sender, MouseEventArgs e)

this.Cursor = Cursors.Default;


这两个事件里面,不知道是不是你要的结果
参考技术C 能再说清楚点吗?

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

源代码工程文件下载

 

以上是关于c# TreeView拖拽问题 十万火急!!的主要内容,如果未能解决你的问题,请参考以下文章

C#中,TreeView 拖拽时,获取被拖拽的节点

c# Winform给treeview添加图标问题

C# winform treeview

如何从 C# 中的两个不同窗体在 TreeView 控件中添加节点

WinForm实现简单的拖拽功能(C#)

c# treeview 字体大小