イベントがコンボボックスからアプリケーションで発生するユーザーの操作と自分のコードで発生するイベントを区別する
イベント:- ユーザーがコンボボックスで別の アイテムを選択した場合、または次の場合
- 自分のコードがコンボ ボックスの
SelectedItem
を反映 コンボボックスは、別のオブジェクトの プロパティを表示しています。
私は現在のオブジェクトのプロパティを更新できるように、ケース1のSelectedIndexChanged
イベントに興味があります。しかし、ケース2では、オブジェクトのプロパティが変更されていないため、イベントを発生させたくありません。
例が役に立ちます。人のリストを含むリストボックスがあり、リスト内の現在選択されている人の国籍を表すコンボボックスがあると考えてみましょう。ケース1はFredが現在リストで選択されている場合に発生し、コンボボックスを使用して国籍を英語からウェールズ語に変更します。ケース2は、リストのスコットランド人であるボブを選択すると起こります。ここで、私のリスト更新イベントハンドラコードは、ボブが選択されたことを認識し、コンボボックスを更新して、スコットランドが選択アイテムになるようにします。これにより、コンボボックスのSelectedIndexChanged
イベントが発生してBobの国籍がスコットランドに設定されます(すでにスコットランドであっても)。
SelectedIndexChanged
イベントを発生させずにコンボボックスのSelectedItem
プロパティを更新するにはどうすればよいですか? 1つの方法は、イベントハンドラの登録を解除し、SelectedItem
を設定してからイベントハンドラを再登録することですが、これは退屈でエラーが発生するようです。より良い方法が必要です。
私を当ててください。しかし、これはちょっと残虐ではありません - "SelectedIndexChangedイベントを発生させずにコンボボックスのSelectedItemプロパティをどのように更新できますか?"私のソリューションに関するフィードバックはありますか? –
これは過度なことかもしれません。フラグを設定するかイベントハンドラを削除する方が簡単ですが、SelectedIndexChangedイベントを中断したい場所が複数あることがわかったときにSuspendLatchを作成しました –
"より良い名前のオファーを歓迎します" - public class SuspendThingerMajig? – Juliet