フォームで [Enter] キーが押された時にフォーカスを遷移させる
スポンサーリンク
汎用機のように [Enter] キーで入力フィールドを遷移させる方法です。この手の質問は、未だに多くの掲示板で見かけるゆえにやむなく Tips を書いております。初めに、これだけは頭に入れておいてください。
- Windows のフォーカス遷移は [Tab] キーである
- 実装しようとしている [Enter] キーには別の役割がある
- 汎用機の概念を Windows に持ち込むことは Windows の GUI を概念から壊すことである
そういうわけで、仕様を見直すことをお勧めします。しかしながら、お仕事の関係上やむを得ない場合は参考にしてください。
方法としては、フォームの KeyPreview を true にしてフォームで一括処理するのが楽かと思います。というよりは、各コントロールのキーイベントで実装すると、保守性が悪くなります。ちなみに、MultiLine なテキストボックスで改行を [Ctrl] + [Enter] で代用できるように考慮しています。
利用の際には KeyPreview を true にしておいてください。
サンプルコード
以下にサンプルコードを示します。
J# 全般
// [Enter] キーで次の TabIndex があるコントロールへフォーカスを移す private void Form1_KeyDown(Object sender, System.Windows.Forms.KeyEventArgs e) { if (e.get_KeyCode() == Keys.Enter) { if (! e.get_Control()) { this.SelectNextControl(this.get_ActiveControl(), ! e.get_Shift(), true, true, true); } } } // フォーカス遷移後の音を消すためにキーイベントが処理されたことにする private void Form1_KeyPress(Object sender, System.Windows.Forms.KeyPressEventArgs e) { if (e.get_KeyChar() == (char)Keys.Enter) { e.set_Handled(true); } }
関連するリファレンス
準備中です。