0

ListView(たとえば)から派生したカスタム コントロールがありMyListViewます。デザイナー モードでは、いくつかListViewGroupの を定義します。残念ながら、後でこのコントロールをフォームで使用すると、このフォームのデザイナを開くたびに、同じグループのセットがコントロールに追加MyListViewされます。そのため、いくつかの編集の後、その中に多数の重複グループがあります。

フォーム デザイナーは (驚くべきことではありませんが)、グループがMyListViewフォーム自体ではなくコンストラクターに既に追加されていることを認識できないようInitializeComponent()です。どうにかしてこれを防ぐことはできますか?

4

1 に答える 1

0

これは、設計時にも実行されるコンストラクターにグループを追加し、それらの値がフォームの Designer.cs ファイルに保存されるためです。コンストラクターの実行が早すぎるため、後で InitializeComponent() によって追加されるグループを確認できません。また、コードがデザイン モードで実行されていることを示す信頼できる兆候を得るには早すぎます。DesignMode プロパティはまだ false です。

適切な修正は、コントロールに独自のデザイナーを与えることですが、これは非常に苦痛であり、特に ListView の場合はそうです。安価な回避策は、グループの追加と、 InitializeComponentのに実行されるイベントの使用を延期することです。それには、HandleCreated イベントが適しています。このような:

class MyListView : ListView {
    protected override void OnHandleCreated(EventArgs e) {
        base.OnHandleCreated(e);
        if (this.DesignTime && this.Groups.Count == 0) {
            // Add the groups here
            //...
        }
    }
}
于 2012-11-20T15:39:44.670 に答える