J#(Java)フォームで [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);
    }
}

関連するリファレンス

準備中です。

スポンサーリンク