8

TreeViewノードごとに多色システムを実装しました。しかし、子ノードを展開するたびに、ノードが消費され、rootNode に塗りつぶされます (画像 2 および 3)。コードは私の前の質問からのもので、これはバグがどのように見えるかです

ここに画像の説明を入力

すべてのノードを閉じて再展開すると、グリッチはなくなります (画像 4)。

問題Boundsは、ドローが適切な場所にない理由です。理由はありますか?


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

2 に答える 2

5

描画グリッチは正確な説明のようです。

AfterExpand イベントをサブスクライブすることで、この回避策を試すことができます。

void treeView1_AfterExpand(object sender, TreeViewEventArgs e) {
  treeView1.Invalidate();
}
于 2012-12-11T18:48:51.763 に答える