树节点文本不同颜色的话(Treenode text different colored words)

2019-07-04 23:24发布

我有一个TreeView和每个它的Node.Text有两个词。 第一和第二的话应该有不同的颜色。 我已经改变与文本的颜色DrawMode属性和DrawNode事件,但我无法弄清楚如何分割Node.Text两种不同的颜色。 有人指出,我可以使用TextRenderer.MeasureText但我没有idead如何/在哪里使用它。

有人有一个想法?


代码:

formload()
{
  treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
}

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) 
{
Color nodeColor = Color.Red;
if ((e.State & TreeNodeStates.Selected) != 0)
  nodeColor = SystemColors.HighlightText;

 TextRenderer.DrawText(e.Graphics,
                    e.Node.Text,
                    e.Node.NodeFont,
                    e.Bounds,
                    nodeColor,
                    Color.Empty,
                    TextFormatFlags.VerticalCenter);
}

Answer 1:

试试这个:

    private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
    {
        string[] texts = e.Node.Text.Split();
        using (Font font = new Font(this.Font, FontStyle.Regular))
        {
            using (Brush brush = new SolidBrush(Color.Red))
            {
                e.Graphics.DrawString(texts[0], font, brush, e.Bounds.Left, e.Bounds.Top);
            }

            using (Brush brush = new SolidBrush(Color.Blue))
            {
                SizeF s = e.Graphics.MeasureString(texts[0], font);
                e.Graphics.DrawString(texts[1], font, brush, e.Bounds.Left + (int)s.Width, e.Bounds.Top);
            }
        }
    }

你必须管理State节点都做拨款行动。

UPDATE

对不起,我的错看到更新后的版本。 没有必要测量空间的大小,因为它已经包含在texts[0]



文章来源: Treenode text different colored words