选项卡键功能在VB.Net中使用Enter键

时间:2011-12-06 21:00:17

标签: .net vb.net visual-studio-2010 textbox

我的表格中有近20个Textbox和5个Combobox,另外一个控件依赖于另一个, 现在我想以这样的方式编写表单的代码:按 Enter 键和 Tab 键应该具有相同的功能。

与按 Tab 键相似,按下 Enter 键时,也应执行焦点移动到下一个控制。 类似地,当我按下 Enter 键时,在按键事件中写入了一些过程代码,但是当我按 Tab 键时也应执行此操作。

7 个答案:

答案 0 :(得分:7)

首先使表单的Keypreview属性= True 然后在表单的Keydown事件中粘贴下面的代码

 If e.KeyCode = Keys.Enter Then
    Me.SelectNextControl(Me.ActiveControl, True, True, True, False) 'for Select Next Control
End If

答案 1 :(得分:6)

我在Winforms中完成它的方法是使用SelectNextControl方法。

Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
    Dim tb As TextBox
    tb = CType(sender, TextBox)

    If Char.IsControl(e.KeyChar) Then
        If e.KeyChar.Equals(Chr(Keys.Return)) Then
            Me.SelectNextControl(tb, True, True, False, True)
            e.Handled = True
        End If
    End If
End Sub

如果您使用的是WPF,则可以使用TraversalRequest

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Input.KeyEventArgs)
    Dim tb As TextBox
    tb = CType(sender, TextBox)

    If e.Key = Key.Return Then
        tb.MoveFocus(New TraversalRequest(FocusNavigationDirection.Next))
    ElseIf e.Key = Key.Tab Then
        Exit Sub
    End If
End Sub

至于拦截 Tab 键,请查看此Stackoverflow question

答案 2 :(得分:1)

简单地制作以下功能

Public Sub perform_tab_on_enter(ByVal e As KeyEventArgs) 
If e.KeyCode = Keys.Enter Then 
  SendKeys.Send("{TAB}")
else
  exit sub
End If
e.SuppressKeyPress = True 'this will prevent ding sound 
End Sub

在控件的keydown事件中调用此函数

答案 3 :(得分:1)

我无需为每个控件手动创建或设置事件处理程序即可完成此操作。在表单初始化时,我运行一个循环遍历每个控件的函数,并添加一个通用的处理函数。

Toast.makeText(SpinnerEx4Activity.this, sp1, Toast.LENGTH_SHORT).show();



ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(SpinnerEx4Activity.this, android.R.layout.simple_spinner_item, list);



ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(SpinnerEx4Activity.this, android.R.layout.simple_spinner_item, list);

答案 4 :(得分:0)

我用于同一问题的一个更好的选择是创建一个新的文本框类textboxClass并在其keypress事件中粘贴以下代码

    Private Sub commonTextbox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
            If Char.IsControl(e.KeyChar) Then
                If e.KeyChar.Equals(Chr(Keys.Return)) Then
                    Me.Parent.SelectNextControl(Me, True, True, False, True)
                    e.Handled = True
                End If
            End If
    End Sub

现在我们可以为任何表单添加任意数量的文本框。它将按照预期行事。当在最后一个文本框上按下回车时,焦点转到第一个。

此代码仅来自@Mark Hall,仅适用于此页面的单个文本框。

答案 5 :(得分:0)

这已经很老了,但是我来到这里是因为我想做同样的事情。这里的一些答案的问题在于,当按下Enter键时,它们总是会跳到下一个控件,而我只希望它使用文本框来实现。如果他们选择了按钮,我希望他们能够按Enter键以“单击”该按钮。所以这就是我所做的。

Private Sub txtName_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtName.KeyPress, txtAttn.KeyPress, txtAdd1.KeyPress, txtAdd2.KeyPress, txtCity.KeyPress, txtState.KeyPress, txtZip.KeyPress

    If Asc(e.KeyChar) = 13 Then
        e.Handled = True
        SendKeys.SendWait("{TAB}")
    End If

End Sub

必须将所有.keypress添加到子句柄的部分中,这很麻烦,但是您可以控制哪些项将使它移到下一个控件,而哪些则不会。当然,您还必须在设计时设置制表符停止顺序才能起作用。但是使用这种方法,一旦将其切换至某个按钮并再次按下Enter键,它仍然可以触发按钮按下。

我本来将它添加为评论,但我没有足够的观点来添加评论。 :)

答案 6 :(得分:-2)

你可以用一些javascript做到这一点: Enter Key Focus