【问题标题】:TextBox Enter Key - Sub Panels within a main Panel文本框输入键 - 主面板中的子面板
【发布时间】:2012-07-30 17:43:55
【问题描述】:

我对这种情况有疑问(见标题)。我在一个大面板中有 6 个子面板。我制作了一个继承自主文本框的 TextBox 类。我正在尝试使用 KeyPressed 事件处理程序来处理 Enter 键。当用户按下 Enter 键时,它会从子面板内的一个 TextBox 移动到下一个子面板。到目前为止,我已经让 Enter Key Event 处理程序为焦点所在的面板工作,而无需跳转到下一个面板。

下面是我用来控制动作的子程序。 问题是我无法从一个子面板跳到另一个子面板。任何帮助将不胜感激!

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

【问题讨论】:

  • 我没有看到任何问题。究竟出了什么问题?
  • 该代码中循环的意图非常不清楚。只需调用一次 GetNextControl() 即可。
  • 子面板内至少有10个其他文本框。循环是为了过滤掉输入的非输入。所以循环实际上会寻找并尝试定位下一个输入框。
  • 为什么在不应获得焦点的控件上将 TabStop 属性设置为 true?解决这个问题,GetNextControl() 就能完成工作。
  • TapStop 属性有助于过滤。除输入文本框外,每个输出文本框都将制表位设置为 false。 GetNextControl() 似乎只在焦点的子面板中工作 - 它不能帮助我转移到包含其他输入字段的下一个子面板

标签: vb.net


【解决方案1】:

听起来好像你把事情复杂化了。正如 HansPassant 所说,您可以使用 GetNextControl 为您完成工作:

当按下回车键时,此代码会将焦点移至表单上的下一个文本框 (based on tab index order):

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 事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    相关资源
    最近更新 更多