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
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
Private Sub AddHandlers()
Try
'Get the first control in the tab order.
Dim ctl As Windows.Forms.Control = Me.GetNextControl(Me, True)
Do Until ctl Is Nothing
If TypeOf ctl Is System.Windows.Forms.TextBox Or TypeOf ctl Is System.Windows.Forms.ComboBox _
Or TypeOf ctl Is System.Windows.Forms.CheckBox Or TypeOf ctl Is System.Windows.Forms.DateTimePicker Then
AddHandler ctl.KeyDown, AddressOf ReturnKeyTabs
End If
'Get the next control in the tab order.
ctl = Me.GetNextControl(ctl, True)
Loop
Catch ex As Exception
End Try
End Sub
Private Sub ReturnKeyTabs(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = System.Windows.Forms.Keys.Return Then
e.Handled = True
e.SuppressKeyPress = True
End If
ReturnKeyTabs(e.KeyCode)
End Sub
Private Sub ReturnKeyTabs(ByVal KeyCode As System.Windows.Forms.Keys)
If KeyCode = System.Windows.Forms.Keys.Return Then
System.Windows.Forms.SendKeys.Send("{Tab}")
KeyCode = 0
End If
End Sub
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
Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.KeyPreview = True
End Sub
然后添加以下代码:
Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles myBase.KeyDown
If TypeOf Me.ActiveControl Is TextBox AndAlso e.KeyCode = Keys.Enter Then
e.Handled = True
Me.SelectNextControl(Me.ActiveControl, True, True, True, True)
End If
End Sub
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
8条答案
按热度按时间k3bvogb11#
首先使窗体的Keypreview属性为True,然后将下面的代码粘贴到窗体的Keydown事件中
dffbzjpn2#
我在Winforms中完成它的方法是使用
SelectNextControl
方法。即
如果您使用WPF,则可以使用
TraversalRequest
即
至于拦截Tab键,看看这个Stackoverflow question。
hi3rlvi23#
简单地制作以下功能
在控件的keydown事件上调用此函数
q8l4jmvw4#
我能够做到这一点,而不必手动创建或设置每个控件的事件处理程序。在窗体的初始化,我运行一个函数,循环通过每个控件,并添加一个通用的处理程序函数。
vd8tlhqk5#
对于同样的问题,我使用的一个更好的选择是创建一个新的文本框类textboxClass,并将下面的代码粘贴到它的keypress事件中
现在我们可以添加任意数量的文本框到任何形式。它将表现为所需的。当回车键按下最后一个文本框焦点转到第一个。
此代码取自@Mark Hall,仅用于此页面的单个文本框。
sqyvllje6#
可以在窗体的Load事件中将窗体的KeyPreview属性设置为True,并处理窗体的KeyDown事件。然后,可以检查活动控件是否为文本框,并且按下的键是否为Enter键,如果是,则可以将事件的Handled属性设置为True,并使用SelectNextControl方法将焦点移动到Tab键顺序中的下一个控件(示例使用Form1)。
然后添加以下代码:
当焦点位于表单中的文本框时,这将允许Enter键充当Tab键。
wwtsj6pe7#
这是相当古老的,但我得到了这里,因为我想做同样的事情。这里的一些答案的问题是,他们总是会跳转到下一个控件时,按回车键,我只希望它做的文本框。如果他们得到一个按钮,我希望他们能够按回车键“点击”该按钮。所以这里是我做了什么。
在sub的handles部分添加所有的.keypress是一种痛苦,但然后你可以控制哪些项目会导致它移动到下一个控件,哪些不会。当然,你还必须在设计时设置制表符停止顺序。但使用这种方法,它仍然可以触发按钮按下,一旦它跳到一个按钮,他们再次点击回车。
我本来想把这个作为评论加进去的,但是我没有足够的分数来加评论。:)
tcbh2hod8#
你可以用JavaScript来实现:Enter Key Focus