C#フォームで [Enter] キーが押された時にフォーカスを遷移させる

スポンサーリンク

汎用機のように [Enter] キーで入力フィールドを遷移させる方法です。この手の質問は、未だに多くの掲示板で見かけるゆえにやむなく Tips を書いております。初めに、これだけは頭に入れておいてください。

  • Windows のフォーカス遷移は [Tab] キーである
  • 実装しようとしている [Enter] キーには別の役割がある
  • 汎用機の概念を Windows に持ち込むことは Windows の GUI を概念から壊すことである

そういうわけで、仕様を見直すことをお勧めします。しかしながら、お仕事の関係上やむを得ない場合は参考にしてください。

方法としては、フォームの KeyPreview を true にしてフォームで一括処理するのが楽かと思います。というよりは、各コントロールのキーイベントで実装すると、保守性が悪くなります。ちなみに、MultiLine なテキストボックスで改行を [Ctrl] + [Enter] で代用できるように考慮しています。

利用の際には KeyPreview を true にしておいてください。

サンプルコード

以下にサンプルコードを示します。

C# 全般
// [Enter] キーで次の TabIndex があるコントロールへフォーカスを移す
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
    if (e.KeyCode == Keys.Enter) {
        if (! e.Control) {
            this.SelectNextControl(this.ActiveControl, ! e.Shift, true, true, true);
        }
    }
}

// フォーカス遷移後の音を消すためにキーイベントが処理されたことにする
private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) {
    if (e.KeyChar == (char)Keys.Enter) {
        e.Handled = true;
    }
}

関連するリファレンス

準備中です。

スポンサーリンク