VS2010 C#.Net 4.1
ユーザーが初期データを選択または入力する必要があるフォームに取り組んでいますComboBox
。Tab
推測に時間がかかった以下のコードを使用して、データが正しい場合はユーザーがキーを押したときに[編集]ボタンを有効にします。そうでない場合は、ボタンを無効にして次のボタンに移動します。
このコードは機能しますが、 truePreviewKeyDown
に設定するとイベントが再発するという副作用があります。IsInputKey
これにより、検証が2回呼び出されます。KeyDown
イベントは1回だけ呼び出されIsInputKey
、2回目の呼び出しで再びfalseになるため、検証を再度確認する必要があります。
理由を理解し、おそらくそれを避けたいと思います。
private void comboBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) {
if (e.KeyData == Keys.Tab) {
if (ValidationRoutine()) {
e.IsInputKey = true; //If Validated, signals KeyDown to examine this key
} //Side effect - This event is called twice when IsInputKey is set to true
}
}
private void comboBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyData == Keys.Tab) {
e.SuppressKeyPress = true; //Stops further processing of the TAB key
btnEdit.Enabled = true;
btnEdit.Focus();
}
}