2

I には a がTreeViewあり、それぞれにNode.Text2 つの単語があります。最初の単語と 2 番目の単語は異なる色にする必要があります。DrawModeプロパティとイベントでテキストの色を既に変更していますが、2 つの異なる色DrawNodeに分割する方法がわかりません。Node.Text誰かが私が使用できると指摘しましたTextRenderer.MeasureTextが、どのように/どこで使用するかわかりません。

誰かがアイデアを持っていますか?


コード :

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);
}
4

1 に答える 1

8

これを試して:

    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適切なアクションを実行するには、ノードを管理する必要があります。

アップデート

申し訳ありませんが、私の間違いは更新されたバージョンを参照してください。すでに に含まれているため、スペース サイズを測定する必要はありませんtexts[0]

于 2012-12-11T16:35:50.040 に答える