【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 @ 2023-01-28 10:09  不溯流光  阅读(499)  评论(0编辑  收藏  举报