【问题标题】:Best Practice for Text and list box input文本和列表框输入的最佳实践
【发布时间】:2020-08-13 07:24:21
【问题描述】:

为了收集数据,我有一个包含多个文本框和列表框的冗长表单。 控件有一个逻辑顺序,并且选项卡索引设置为引导用户通过。 我的问题是,当我尝试使用 keydown 事件控制流程时,我失去了情节 - 特别是构建 KeyEventArgs 以在它是 keys.Enter 时模拟选项卡。

是否有“最佳实践”算法可以帮助我解决这个问题?

谢谢

【问题讨论】:

  • edit 提出问题并显示不起作用的代码并准确地解释它是如何不起作用的。

标签: vb.net forms keyevent


【解决方案1】:

根据我对您问题的理解,您应该这样做:

Private Sub TabOnEnterKey(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown,
                                                                       TextBox2.KeyDown,
                                                                       ListBox1.KeyDown,
                                                                       ListBox2.KeyDown
    If e.KeyCode = Keys.Enter Then
        Select Case e.Modifiers
            Case Keys.None
                'Move forward in the Tab order.
                SelectNextControl(ActiveControl, True, True, True, True)
            Case Keys.Shift
                'Move backward in the Tab order.
                SelectNextControl(ActiveControl, False, True, True, True)
        End Select
    End If
End Sub

根据评论,将e.SuppressKeyPress 设置为True 将防止在单行TextBox 中按Enter 时播放声音。代码的结构有多种方式,请记住,只有在您实际调用 SelectNextControl 时才想这样做。您可以在我已经发布的内容中添加两次相同的代码:

Private Sub TabOnEnterKey(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown,
                                                                       TextBox2.KeyDown,
                                                                       ListBox1.KeyDown,
                                                                       ListBox2.KeyDown
    If e.KeyCode = Keys.Enter Then
        Select Case e.Modifiers
            Case Keys.None
                'Move forward in the Tab order.
                SelectNextControl(ActiveControl, True, True, True, True)

                'Prevent sound playing in single-line TextBoxes.
                e.SuppressKeyPress = True
            Case Keys.Shift
                'Move backward in the Tab order.
                SelectNextControl(ActiveControl, False, True, True, True)

                'Prevent sound playing in single-line TextBoxes.
                e.SuppressKeyPress = True
        End Select
    End If
End Sub

或者你可以这样做:

Private Sub TabOnEnterKey(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyDown,
                                                                       TextBox2.KeyDown,
                                                                       ListBox1.KeyDown,
                                                                       ListBox2.KeyDown
    If e.KeyCode = Keys.Enter Then
        Dim forward As Boolean? = Nothing

        Select Case e.Modifiers
            Case Keys.None
                forward = True
            Case Keys.Shift
                forward = False
        End Select

        If forward.HasValue Then
            'Move following the Tab order.
            SelectNextControl(ActiveControl, forward.Value, True, True, True)

            'Prevent sound playing in single-line TextBoxes.
            e.SuppressKeyPress = True
        End If
    End If
End Sub

【讨论】:

  • 您可能需要添加e.SuppressKeyPress = True 以消除“哔”声。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-09
  • 2016-01-09
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多