Enterでコントロールのフォーカスを移動させる
一つのテキストボックスで入力が終わったり、ボタンでも押し終わった時にエンターで次の項目にフォーカスを充てるようにしたいときのおまじない。shiftで逆走する
- ①Formのプロパティ「keypreview」をtrueにする
- ②「keypreview」を設定したformクラスに「keydown」イベントメソッドを設定
- ③以下のコードをイベントメソッド内部に記述
- ④タブオーダーの早い順にタブが動くよ
- ※ボタン→ボタンへのフォーカス移動
- ※テキストエリアとか
①Formのプロパティ「keypreview」をtrueにする
②「keypreview」を設定したformクラスに「keydown」イベントメソッドを設定
③以下のコードをイベントメソッド内部に記述
if (e.KeyCode == Keys.Enter) { if (e.Shift) { ProcessTabKey(false); } else { ProcessTabKey(true); } }
④タブオーダーの早い順にタブが動くよ
ただしテキストに限る
※ボタン→ボタンへのフォーカス移動
「keydown」イベントではボタンから次のコントロールへのフォーカス移動ができないため、実現したい場合は「keyup」イベントを利用することになる。(書く内容は同じ)
ただ、一般的な用途を考えてボタン→ボタンとかボタン→テキストの連続操作はふつうは考えにくいのでむやみに使わないほうがよさそう。
※テキストエリアとか
③のメソッド内に「テキストエリアかどうか」を判定するロジックをつけるのがよさそう
IME変換時のエンターを受け付けてしまう場合がある様子(一行テキストボックスだと大丈夫のような)なので、テキストエリアは別キー(Altとか)を加えるなりのほうがよさげ
//現在のコントロールが複数行テキストボックスか bool isMultilineTextbox = ((this.ActiveControl is TextBoxBase) && ((TextBoxBase)this.ActiveControl).Multiline);
参考 探せばけっこういっぱいある
Enterキーを押した時、まるでTabキーを押したかのように、次のコントロールにフォーカスを移す: .NET Tips: C#, VB.NET