忍者ブログ

VB.NET-TIPS などプログラミングについて

VB.NETのTIPS(小技集)を中心に、Javascript、PHP その他のプログラミングについて少し役に立つ情報を発信します。いわゆる個人的な忘備録ですが、みなさんのお役に立てれば幸いです。

VB.NET:入力コントロールのフォーカス移動を「Enter」キーで行う
VB.NETのフォームに張り付けた入力コントロールの遷移は通常は「Tab」キーで行えますが、 「Enter」キーでも次の入力コントロールへフォーカスを移動したい要求は少なからずあります。

普通の人はテキストボックスに何かを入力し、入力の最後に「Enter」を押したくなります。 キーボードの配置(形)からしても1個の入力後は「Enter」を押すことが前提の様な感じがします。

さて、複数のTextBoxを並べたFormを例にしますが、画面的には以下の様な感じです。 この画面で、各TextBoxで「Enter」キーを押下した時に、次のコントロールにフォーカスを移動させます。


次のコントロールにフォーカスを移動させるためのメソッドが、Formコントロールのメソッドとして在ります。 以下のメソッドがそうです。
-----
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


このメソッドをKeyDownイベントで呼出せる形でメソッド化し、 FormのKeyDownで呼出してやるか、または、フォームのコンストラクタでKeyDownイベントにハンドラとして追加してやります。
以下のソースでは、コンストラクタでKeyDownイベントにハンドラを追加しています。


Public Class Form2
    '当クラスのコンストラクタ
    Public Sub New()
        ' この呼び出しはデザイナーで必要です。
        InitializeComponent()
        ' InitializeComponent() 呼び出しの後で初期化を追加します。
        '「Enter」キーでのコントロール遷移処理の設定
        Me.KeyPreview = True
        AddHandler Me.KeyDown, AddressOf MoveNextCtrl
        AddHandler Me.KeyPress, AddressOf MoveNextCtrlBeepSup
    End Sub

    '「Enter」キーによるコントロールの移動メソッド
    Private Sub MoveNextCtrl(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
        Try
            If e.KeyCode = Keys.Enter Then
                Dim fProc As Boolean = True
                If TypeOf sender.ActiveControl Is TextBox Then
                    If (CType(sender.ActiveControl, TextBox)).Multiline = True Then
                        fProc = False
                    End If
                End If
                '次のコントロールをアクティブにします。
                If fProc Then
                    'forward: タブ オーダー内を前方に移動する場合は true。後方に移動する場合は false。
                    Dim forward As Boolean = e.Modifiers <> Keys.Shift
                    sender.SelectNextControl(sender.ActiveControl, forward, True, True, True)
                End If
            End If
        Catch ex As Exception
            MsgBox("PGエラー:" & ex.ToString)
        End Try
    End Sub

    '「Enter」キーによるコントロールの移動メソッド時にビープ音の消音
    Private Sub MoveNextCtrlBeepSup(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        Try
            'Enterキーが押された事を取得
            If e.KeyChar = Chr(Keys.Enter) Then
                Dim fProc As Boolean = True
                If TypeOf sender.ActiveControl Is TextBox Then
                    If (CType(sender.ActiveControl, TextBox)).Multiline = True Then
                        fProc = False
                    End If
                End If
                'イベントをキャンセルでBeep音の消音
                If fProc Then
                    e.Handled = True
                End If
            End If
        Catch ex As Exception
            MsgBox("PGエラー:" & ex.ToString)
        End Try
    End Sub
End Class

■「Enter」キーによるコントロールの移動メソッド時にビープ音の消音

入力コントロールで「Enter」キーを押下するとビーとBeep音がなります。 これを止めるには、KeyDownイベントで「Enter」の次のコントロール移動をした様に、 KeyPressイベントで、「Enter」キー入力時にイベント処理のキャンセルを行うことです。


=====
2016/03/14:の時の情報











PR

コメント

コメントを書く