颜色树节点有2种颜色但不通过用户

时间:2013-02-11 07:48:09

标签: c# treeview treenode

我想在树节点的一部分上着色而不是通过用户着色(不使用“选定的节点”) 所以DrawMode没有帮助我。

我正在使用c#

例如,我希望文本上有空格的所有树节点都在一侧以绿色着色,而另一侧以红色着色。

谢谢!

1 个答案:

答案 0 :(得分:0)

DrawMode是要走的路。您必须将其设置为OwnerDrawText,并订阅DrawNode事件。即:

this.treeView1.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText;
this.treeView1.DrawNode += new System.Windows.Forms.DrawTreeNodeEventHandler(this.treeView1_DrawNode);

这只是绘图方法的样子。由您来修改它以获得良好的图形结果,但它可以让您了解要走的路。

    private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
    {
        Font nodeFont = e.Node.NodeFont;
        if (nodeFont == null) nodeFont = ((TreeView)sender).Font;

        string txt = e.Node.Text;
        int idx = txt.IndexOf(' ');
        string greenTxt;
        string redTxt;
        if (idx >= 0)
        {
            greenTxt = txt.Substring(0, idx);
            redTxt = txt.Substring(idx);
        }
        else
        {
            greenTxt = txt;
            redTxt = string.Empty;
        }
        Rectangle greenRect = new Rectangle(e.Bounds.Location, new Size((int)Math.Ceiling(e.Graphics.MeasureString(greenTxt, nodeFont).Width), e.Bounds.Height));
        Rectangle redRect = new Rectangle(e.Bounds.Location + new Size(greenRect.Width, 0), new Size((int)Math.Ceiling(e.Graphics.MeasureString(redTxt, nodeFont).Width), e.Bounds.Height));
        e.Graphics.DrawString(greenTxt, nodeFont, Brushes.Green, greenRect);
        if (!string.IsNullOrEmpty(redTxt))
            e.Graphics.DrawString(redTxt, nodeFont,
                Brushes.Red, redRect);
    }

您可以找到更复杂的示例here

相关问题