0

このシナリオで問題が発生しました(タイトルを参照)。1つの大きなパネル内に6つのサブパネルがあります。メインのTextboxから継承するTextBoxクラスを作成しました。Enterキーを処理するためにKeyPressedイベントハンドラーを使用しようとしています。ユーザーがEnterキーを押すと、サブパネル内の1つのテキストボックスから次のサブパネルに移動します。これまでのところ、次のパネルにジャンプすることなく、フォーカスが置かれているパネルでEnterKeyEventハンドラーが機能するようになりました。

以下は、動きを制御するために使用しているサブルーチンです。問題は、あるサブパネルから別のサブパネルにジャンプできないことです。どんな助けでもいただければ幸いです!

Protected Shared Sub NextControl(ByVal tControl As Control, ByVal Direction As Boolean)

    Dim pControl As Control = tControl.TopLevelControl
    tControl = pControl.GetNextControl(tControl, Direction)

    If Direction = False Then
        Dim tParent As Control
        While TypeOf tControl Is UserControl
            tParent = tControl.Parent
            tControl = pControl.GetNextControl(tControl, Direction)
            If tControl.Parent Is tParent Then
                Exit While
            End If
        End While
    End If

    If tBox_P00.ControlNesting > 0 Then
        'Dim i As Integer
        pControl = tControl.Parent
        For i As Integer = 0 To tBox_P00.ControlNesting - 2
            pControl = pControl.Parent
        Next
    End If

    If Not tControl Is Nothing Then
        Do Until (tControl.TabStop = True) AndAlso (tControl.Enabled = True) AndAlso (tControl.Visible = True) AndAlso (TypeOf tControl Is Tbx00)

            tControl = pControl.GetNextControl(tControl, Direction)

            'Last in the Panel
            If tControl Is Nothing Then

                tBox_P00.Select(0, tBox_P00.TextLength)
                Beep()
                Exit Sub

            End If
        Loop
        tControl.Focus()
    Else
        tBox_P00.Select(0, tBox_P00.TextLength)
        Beep()
    End If

    Exit Sub
End Sub
4

1 に答える 1

0

あなたが物事を複雑にしているように聞こえます。HansPassantが述べたように、 GetNextControlを使用して作業を行うことができます。

このコードは、Enterキーが押されると、フォーカスをフォーム上の次のテキストボックスに移動します(タブインデックスの順序に基づく)。

Private Sub TextBox1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Enter Then
        Dim ctl As Control = CType(sender, Control)
        Do
            ctl = Me.GetNextControl(ctl, True)
        Loop Until TypeOf ctl Is TextBox
        ctl.Focus()
    End If
End Sub

次に、これを展開して、すべてのテキストボックスのKeyDownイベントを処理できます。

于 2012-07-31T08:06:07.187 に答える