フォームで使用可能なすべてのコントロールに対して、共通のKeyDown偶数ハンドラーを実行したいと思います。私はそれを達成することができますか?
より明確にするために、私の意図は、Enterキーが押されるたびにそれを検出し、フォーカスを現在のコントロールから次のTabIndexのあるコントロールに移動することです。
どうすればそれを達成できますか?
Enterキーの通常の使用の邪魔にならないようにする必要があります。これは近いはずです:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == Keys.Enter && this.AcceptButton == null && this.ActiveControl != null) {
TextBoxBase box = this.ActiveControl as TextBoxBase;
if (box == null || !box.Multiline) {
// Not a dialog, not a multi-line textbox; we can use Enter for tabbing
this.SelectNextControl(this.ActiveControl, true, true, true, true);
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}
フォームのProcessCmdKey
メソッドをオーバーライドします。
実際、ProcessCmdKeyはフォームイベントリストの下にないため、以前は使用できませんでした。^ _ ^
少し編集して修正し、使用可能なボタンがあるかどうかを検出しました。使用可能なボタンがある場合は、フォーカスが移動せず、代わりにボタンを押します。
Button b = this.ActiveControl as Button;
if (keyData == Keys.Enter && this.AcceptButton == null && this.ActiveControl != null && !this.ActiveControl.Equals(b))
{
TextBoxBase box = this.ActiveControl as TextBoxBase;
if (box == null || !box.Multiline)
{
// Not a dialog, not a multi-line textbox; we can use Enter for tabbing
this.SelectNextControl(this.ActiveControl, true, true, true, true);
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
しかし、ボタンを1回押してから、もう一度新しいコントロールに移動したい場合はどうすればよいですか?このProcessCmdKeyを手動で呼び出す方法はありますか?