VB.NET Tips - フォーム上のコントロールで[Enter]キー押下で次のコントロールにフォーカス移動する
入力フォームで TextBox 等のフォーカス移動を[Enter]キー押下で行いたいという要望は結構あります。
汎用機などでは昔から[Enter]キー押下で入力域を移動できたため残ってきた入力方式です。
この方法をVB.NETで実現するには、各入力コントロールで[Enter]キー押下を判定して次のコントロールに
フォーカスを移動すればいいのですが、各コントロールに制御をプログラムするのは手間です。
そのため、フォームで[Enter]キーの押下を検知して、そこで一括に制御すれば簡単に行えます。
フォームの KeyPreview プロパティを True に設定し、
フォームKeyDownイベントで SelectNextControl メソッドを使用しフォーカス移動をさせます。
SelectNextControl メソッドについて
Public Function SelectNextControl(ctl As System.Windows.Forms.Control
, forward As Boolean
, tabStopOnly As Boolean
, nested As Boolean
, wrap As Boolean) As Boolean
概要:
次のコントロールをアクティブにします。
パラメーター:
ctl: 検索を開始する位置にある System.Windows.Forms.Control。
forward: タブ オーダー内を前方に移動する場合は true。
後方に移動する場合は false。
tabStopOnly: System.Windows.Forms.Control.TabStop プロパティが false に設定されている
コントロールを無視する場合は true。それ以外の場合は false。
nested: 入れ子になった(子コントロールの子)子コントロールを含める場合は true。
それ以外の場合は false。
wrap: タブ オーダーの最後のコントロールに到達した後、
タブ オーダーの最初のコントロールから検索を続行する場合は true。
それ以外の場合は false。
戻り値:
コントロールがアクティブにされた場合は true。それ以外の場合は false。
今回の例としては、フォーム上に3個の TextBox を貼り付けています。
[Enter]キーを押下することで3個の TextBox のフォーカスが移動します。
フォーム上のコントロールで[Enter]キー押下で次のコントロールにフォーカス移動する
01 | Public Class frmEnterNext |
06 | Private Sub frmEnterNext_KeyDown( ByVal sender As Object , ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase .KeyDown |
07 | If e.KeyCode = Keys.Enter Then |
08 | If e.Control = False Then |
10 | Me .SelectNextControl( Me .ActiveControl, Not e.Shift, True , True , True ) |
18 | Private Sub frmEnterNext_KeyPress( ByVal sender As Object , ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase .KeyPress |
19 | If e.KeyChar = ControlChars.Cr Then |
28 | Private Sub frmEnterNext_Load(sender As Object , e As EventArgs) Handles Me .Load |