文本和列表框输入的最佳做法

问题描述

我有一个冗长的表格,其中包含多个文本框和列表框,以便收集数据。 控件具有逻辑顺序,并且将选项卡索引设置为引导用户。 我的问题是,当我尝试通过keydown事件控制流程时,我失去了情节-尤其是构造KeyEventArgs来模拟作为key的tab。

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

谢谢

解决方法

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

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)
            Case Keys.Shift
                'Move backward in the Tab order.
                SelectNextControl(ActiveControl,False,True)
        End Select
    End If
End Sub

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

Private Sub TabOnEnterKey(sender As Object,True)

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

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

或者您可以这样做:

Private Sub TabOnEnterKey(sender As Object,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)

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