我的表格中有近20个Textbox和5个Combobox,另外一个控件依赖于另一个, 现在我想以这样的方式编写表单的代码:按 Enter 键和 Tab 键应该具有相同的功能。
与按 Tab 键相似,按下 Enter 键时,也应执行焦点移动到下一个控制。 类似地,当我按下 Enter 键时,在按键事件中写入了一些过程代码,但是当我按 Tab 键时也应执行此操作。
答案 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