0

TreeViewの特定のTreeNodeのBackColorを、ユーザーがアプリケーションを使用しているときにノードに何か面白いことが起こったことを示すヒントとして設定しました。ただし、BackColorを設定すると、変更された特定のTreeNodeのラベル領域だけでなく、親TreeViewコントロール全体が再描画されます。TreeNodeでBackColorを設定するだけで、RefreshまたはUpdateを呼び出すことはありません。変更されたTreeNodeの境界を単に無効にするのではなく、TreeViewがその領域全体を更新しているようです。これにより、コントロールの煩わしいクイックフラッシュが発生します。

なぜこれが起こっているのか、そしてそれを簡単に止めることができるかどうかについて何か考えはありますか?

4

1 に答える 1

1

これを防ぐことができるようには見えません。TreeNode.BackColorセッターのコードを確認しました。

[SRDescription("TreeNodeBackColorDescr"), SRCategory("CatAppearance")]
public Color BackColor
{
    get
    {
        if (this.propBag == null)
        {
            return Color.Empty;
        }
        return this.propBag.BackColor;
    }
    set
    {
        Color backColor = this.BackColor;
        if (value.IsEmpty)
        {
            if (this.propBag != null)
            {
                this.propBag.BackColor = Color.Empty;
                this.RemovePropBagIfEmpty();
            }
            if (!backColor.IsEmpty)
            {
                this.InvalidateHostTree();
            }
        }
        else
        {
            if (this.propBag == null)
            {
                this.propBag = new OwnerDrawPropertyBag();
            }
            this.propBag.BackColor = value;
            if (!value.Equals(backColor))
            {
                this.InvalidateHostTree();
            }
        }
    }
}

BackColorが変更されるたびに、ノードを含むツリーに無効化が強制されます。ここでも、InvalidateHostTree関数を見ると、更新の発生を停止するために設定できるフラグはありません。

于 2010-07-22T08:01:55.730 に答える