さて、今日は、生徒さんからの質問を取り上げますよ。
Visual Basicです。
フォームに配置したコントロールは、Tabキーで、移動できるようになっています。(Windowsは、この方法を推奨しています)
しかし、Enterキーでコントロール間を移動したいというのが、生徒さんの要望なのです。
確かに、その気持ちも分かりますよね。
それでは、方法を説明します。
Visual Studio 2008を起動して、任意の名前で新規作成してください。
フォームが表示されたら、テキストボックスを配置します。
今回は、5つ配置しました。
初期設定では、配置順に、Tabキーでコントロール移動が出来ますよ。

さて、それでは、コードを書きます。
各コントロール(今回は、テキストボックス)の KeyPressイベントに記述します。
「押されたキーがEnterキーなら、タブキーが押されたときと同様の処理を行う」
といった内容のコードとなります。
ただ、同じ内容のコードを、今回は、5つのテキストボックスについて記述するのは、面倒なので、少し楽をする方法をご紹介します。
それでは、フォームのタイトルバーをダブルクリックして、コード画面に切り替えます。
表示されたら、以下のようにコードを記述します。
こんな感じですよ。

簡単に説明すると、フォームのロードイベントに対して、
すべてのコントロールのKeyPressイベントにCtl_KeyPressというサブルーチンを結び付けますよ、という内容です。
そして、Ctl_KeyPressプロシージャの中が、今回のメイン処理となります。
各コントロールのKeyPressイベントに毎回メイン処理の内容を記述するのではなく、
今回のようにすると、記述するコードのボリュームも格段に減りますし、コントロールを追加しても、追加するコードは不要となります。
それでは、F5キーを押して、デバッグしましょう。

入力した後で、Enterキーを押すと、次のコントロールに移動しますね。
それでは、デバッグを終了し、フォームにコントロールを追加してみましょう。
今度は、コンボボックスを追加しました。

F5キーを押して、デバッグします。
すると、コードの追加なしに、ちゃんと、コンボボックスも含めて移動できますね。
もし、特定のコントロールだけ、Enterキーで移動したい場合は、
対象のコントロールのTagプロパティに、任意の文字を設定してください。
そして、ロードイベントのコードに、条件分岐のコードを追加してくださいね。
今日の信州は、暑くなりそうですよ。
だい
Visual Basicです。
フォームに配置したコントロールは、Tabキーで、移動できるようになっています。(Windowsは、この方法を推奨しています)
しかし、Enterキーでコントロール間を移動したいというのが、生徒さんの要望なのです。
確かに、その気持ちも分かりますよね。
それでは、方法を説明します。
Visual Studio 2008を起動して、任意の名前で新規作成してください。
フォームが表示されたら、テキストボックスを配置します。
今回は、5つ配置しました。
初期設定では、配置順に、Tabキーでコントロール移動が出来ますよ。

さて、それでは、コードを書きます。
各コントロール(今回は、テキストボックス)の KeyPressイベントに記述します。
「押されたキーがEnterキーなら、タブキーが押されたときと同様の処理を行う」
といった内容のコードとなります。
ただ、同じ内容のコードを、今回は、5つのテキストボックスについて記述するのは、面倒なので、少し楽をする方法をご紹介します。
それでは、フォームのタイトルバーをダブルクリックして、コード画面に切り替えます。
表示されたら、以下のようにコードを記述します。
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load For Each ctl As Control In Me.Controls AddHandler ctl.KeyPress, AddressOf Ctl_KeyPress Next End Sub Private Sub Ctl_KeyPress(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) If e.KeyChar = Chr(Keys.Enter) Then SendKeys.SendWait("{Tab}") e.Handled = True End If End Sub End Class
こんな感じですよ。

簡単に説明すると、フォームのロードイベントに対して、
すべてのコントロールのKeyPressイベントにCtl_KeyPressというサブルーチンを結び付けますよ、という内容です。
そして、Ctl_KeyPressプロシージャの中が、今回のメイン処理となります。
各コントロールのKeyPressイベントに毎回メイン処理の内容を記述するのではなく、
今回のようにすると、記述するコードのボリュームも格段に減りますし、コントロールを追加しても、追加するコードは不要となります。
それでは、F5キーを押して、デバッグしましょう。

入力した後で、Enterキーを押すと、次のコントロールに移動しますね。
それでは、デバッグを終了し、フォームにコントロールを追加してみましょう。
今度は、コンボボックスを追加しました。

F5キーを押して、デバッグします。
すると、コードの追加なしに、ちゃんと、コンボボックスも含めて移動できますね。
もし、特定のコントロールだけ、Enterキーで移動したい場合は、
対象のコントロールのTagプロパティに、任意の文字を設定してください。
そして、ロードイベントのコードに、条件分岐のコードを追加してくださいね。
今日の信州は、暑くなりそうですよ。
だい

※コメント投稿者のブログIDはブログ作成者のみに通知されます