UserControlはListControlとして機能するため、2つのイベントと2つのプロパティを実装する必要があります。
public event System.EventHandler SelectedIndexChanged;
public event System.EventHandler SelectionChangeCommitted;
public int SelectedIndex {
get;
set;
}
public T SelectedItem { // Where T is whatever your type is
get;
set;
}
SelectedIndexChanged
は常に、常にあなたの選択したインデックスが変更されたときにトリガする必要があるアクションに使用する必要があります。ユーザが物理的に選択を変更すると、SelectionChangeCommitted
はのみになります。 2つの間の分離は重要な違いであり、.NETのほとんどのコントロールはこのパターン(たとえばComboBox)に従いますが、イベントに同じ名前を使用することはできません。
これで、プロパティを変更する必要があるコントロールが同じユーザーコントロール内にある場合は、もちろん、適切なイベントのユーザーコントロールコード内でコントロールする必要があります。さもなければ、コードは孤児にされなければなりません。フォームまたは別のユーザーコントロール)に参加し、そこで作業を行うことができます。
順本当にあなたの要件に依存しますが、(それは奇妙な行動を導入するように一度変化当たり以上ではなく)SelectedIndexChanged
が常にが発生しなければならない、と再びSelectionChangeCommitted
はユーザーのみ(例えばによって提起されなければならない。設定SelectedIndexまたはSelectedItem)を使用します。
ユーザが知る前に内部のものが起きた場合、まずSelectedIndexChangedを呼び出してからSelectionChangeCommittedを呼び出す必要があります。それが問題でなければ、または。後で注文を変更すると、コントロールを実装しているユーザーの変更が破棄される可能性があるため、決定が確実であることを確認してください。
2つの違いはSelectedIndexであり、SelectedItemは内部的にリストをクリアしたり、新しいアイテムを追加したりするなどの方法で更新されますが、必ずしも物理的なユーザーアクションであっても、 。
これが役に立ちます。
継承するクラスが実際に私の基底クラスをオーバーライドできるという事実を考えて、アプローチにいくつかの視点を置きます。ありがとうございました。 – PedroC88