【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;
/*******相与枕藉乎舟中,不知东方之既白*******/