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
必要があり(ただし、奇妙な動作を引き起こすため、変更ごとに1回だけ上げる必要があります) 、ユーザーのみが上げる必要があります(たとえば、SelectedIndexまたはSelectedItemの設定)。SelectionChangeCommitted
経験則として、ユーザーが気付く前に内部的なことが発生しなければならない場合は、最初にSelectedIndexChangedを呼び出し、次にSelectionChangeCommittedを呼び出します。それが問題ではない場合は、または。後で順序を変更すると、コントロールを実装する人に重大な変更が生じる可能性があるため、確実な決定を下してください。
2つの違いは、SelectedIndexとSelectedItemは、リストを内部的にクリアしたり、新しいアイテムを追加したりするなどして更新されますが、必ずしも両方のイベントが発生する物理的なユーザーアクションであるとは限りません。
お役に立てれば。