1

カスタム値を入力したいいくつかのカスタム TreenodeTypes があります。それらは次のようになります。

public class QuestionNode : TreeNode
{
    public string Question { get; set; }
    public new string Text
    {
        get { return string.Format("Question: {0}", Question); }
    }
}

このノードをツリービュー「trvWhatever」に追加すると:

trvWhatever.Nodes.Add(new QuestionNode { Question="WTF?"});

ノードはまだ見えません。ツリービューにはノードが含まれていますが、「テキスト」プロパティはまだ null です。

「my」プロパティの代わりに base-Property が使用されていることを理解しています。それを変更する方法はありますか?

4

1 に答える 1

1

「my」プロパティの代わりに base-Property が使用されていることを理解しています。それを変更する方法はありますか?

そうではありません。問題は、それが仮想プロパティではなく、同じ名前の新しいプロパティを導入したばかりであり、ポリモーフィックに呼び出されていないことです。

確かに、より簡単な解決策は、プロパティを自分で設定することです...潜在的にコンストラクター内でText

public class QuestionNode : TreeNode
{
    private readonly string question;

    public QuestionNode(string question)
    {
        this.question = question;
        this.Text = string.Format("Question: {0}", question);
    }
}

もちろん、代わりにプロパティ セッター内でこれを行うこともできます。

public class QuestionNode : TreeNode
{
    private string question;

    public string Question
    {
        get { return question; } 
        set
        {
            this.question = value;
            this.Text = string.Format("Question: {0}", question);
        }
    }
}

...しかし、後で質問を変更する必要がある何らかの理由がない限り、個人的にはコンストラクターのバージョンに固執します。

于 2013-10-19T21:30:25.827 に答える