【Winform】TreeView使用汇总

 


一、拖拽节点到另一个容器Panel中

TreeView控件需要监听:
(1)ItemDrag事件(当用户开始拖动节点时发生)。

对于Panel控件:
(1)开启Panel的AlowDrop属性设置为true 表示允许进行拖入操作
(2)DragEnter事件 在将对象拖入控件的边界时发生。
(3)DragDrop事件 在完成拖放操作时发生。
复制代码
        private void OnTreeView1ItemDrag(object sender, ItemDragEventArgs e)//TreeView的ItemDrag事件
         {
             IDataObject data = new DataObject();
 
             data.SetData("Test", e.Item);
 
             //开始拖放操作
             this.DoDragDrop(data, DragDropEffects.Copy);
         }
 
         private void OnPanel1DragEnter(object sender, DragEventArgs e)//Panel的DragEnter
         {
             if (e.Data.GetDataPresent("Test"))
                 e.Effect = DragDropEffects.Copy;
             else
                 e.Effect = DragDropEffects.None;
         }
 
         private void OnPanel1DragDrop(object sender, DragEventArgs e)//Panel的DragDrop事件
         {
             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;
 
         }
复制代码

链接

 

二、统一改变节点颜色

属性及事件绑定:

       treeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
       treeView.DrawNode += new DrawTreeNodeEventHandler(treeView_DrawNode);

功能函数:

复制代码
        private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
        {
            if (e.State == TreeNodeStates.Selected)
            //if ((e.State & TreeNodeStates.Selected) != 0)
            {
                e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(0, 122, 204)), e.Node.Bounds);
                Font nodeFont = e.Node.NodeFont;
                if (nodeFont == null) nodeFont = ((TreeView)sender).Font;
                e.Graphics.DrawString(e.Node.Text, nodeFont, Brushes.White, Rectangle.Inflate(e.Bounds, 2, 0));
            }
            else
            {
                e.DrawDefault = true;
            }
        }
复制代码

 

如果需要改变指定节点的颜色:

treeView.Nodes[i].Nodes[j].ForeColor = Color.Red;

 

posted @   不溯流光  阅读(550)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示