我正在使用VB.NET 2008的.NET 3.5框架。
我的表单中有一些文本框。当我的用户在我的一个文本框上按下ENTER时,我想要类似于标签的行为。我使用了以下代码:
Private Sub txtDiscount_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDiscount.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
SendKeys.Send("{TAB}")
e.Handled = True
End If
End Sub
但它对我不起作用。
解决方案是什么?
答案 0 :(得分:34)
在KeyDown事件中:
If e.KeyCode = Keys.Enter Then
Messagebox.Show("Enter key pressed")
end if
答案 1 :(得分:21)
确保将表单KeyPreview属性设置为true。
Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
SendKeys.Send("{TAB}")
e.Handled = True
End If
End Sub
答案 2 :(得分:10)
无需将KeyPreview属性设置为True。只需添加以下功能即可。
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) _
As Boolean
If msg.WParam.ToInt32() = CInt(Keys.Enter) Then
SendKeys.Send("{Tab}")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
现在,当您在TextBox上按Enter键时,控件将移至下一个控件。
答案 3 :(得分:9)
我正在使用VB 2010 .NET 4.0并使用以下内容:
Private Sub tbSecurity_KeyPress(sender As System.Object, e As System.EventArgs) Handles tbSecurity.KeyPress
Dim tmp As System.Windows.Forms.KeyPressEventArgs = e
If tmp.KeyChar = ChrW(Keys.Enter) Then
MessageBox.Show("Enter key")
Else
MessageBox.Show(tmp.KeyChar)
End If
End Sub
像魅力一样!
答案 4 :(得分:5)
您可以使用PreviewKeyDown事件
Private Sub txtPassword_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles txtPassword.PreviewKeyDown
If e.KeyCode = Keys.Enter Then
Call btnLogin_Click(sender, e)
End If
End Sub
在VB.NET 2010上测试
答案 5 :(得分:3)
也可以试试这个:
If e.KeyChar = ChrW(Keys.Enter) Then
'Do Necessary code here
End If
答案 6 :(得分:3)
我看到这已经得到了解答,但似乎你可以避免所有这些重新映射'只需将验证挂钩到表单上的AcceptButton即可输入密钥。即。你有3个文本框(txtA,txtB,txtC)和一个' OK'按钮设置为AcceptButton(并正确设置TabOrder)。因此,如果在txtA中并且你点击回车,如果数据无效,你的焦点将保留在txtA中,但如果它有效,假设其他txts需要输入,验证将只是让你进入需要有效输入的下一个txt模拟TAB行为...一旦所有txts都有有效输入,按Enter键将触发一个succsessful验证和关闭表单(或者其他......)有意义吗?
答案 7 :(得分:1)
使用KeyDown事件代替KeyPress
If e.KeyCode = Keys.Enter Then
MsgBox ("You pressed enter")
End if
注意:请确保您在表单上未设置“接受按钮”。 AcceptButton将其设置为“无”
答案 8 :(得分:0)
我遇到了同样的问题,我无法在Framework 2.0上使这个答案工作,所以我深入挖掘。
您必须首先处理文本框上的PreviewKeyDown,因此当ENTER出现时,您将设置IsInputKey,以便它可以由文本框上的keyDown事件处理或转发。像这样:
Private Sub txtFiltro_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles txtFiltro.PreviewKeyDown
Select Case e.KeyCode
Case Keys.Enter
e.IsInputKey = True
End Select
End Sub
然后你将在文本框上处理事件keydown。其中一个答案是在正确的轨道上,但错过了设置e.IsInputKey。
Private Sub txtFiltro_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtFiltro.KeyDown
If e.KeyCode = Keys.Enter Then
e.handled = True
Textbox1.Focus()
End If
End Sub
答案 9 :(得分:0)
Private Sub BagQty_KeyPress(sender As Object, e As KeyPressEventArgs) Handles BagQty.KeyPress
Select e.KeyChar
Case Microsoft.VisualBasic.ChrW(Keys.Return)
PurchaseTotal.Text = Val(ActualRate.Text) * Val(BagQty.Text)
End Select
End Sub
答案 10 :(得分:0)
使用此代码,当用户按下
时,这可能会帮助您获得类似行为的标签 Private Sub TxtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TxtSearch.KeyPress
Try
If e.KeyChar = Convert.ToChar(13) Then
nexttextbox.setfoucus
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
答案 11 :(得分:0)
以下代码可以使用。
Public Class Form1
Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar = Convert.ToChar(13) Then
MsgBox("enter key pressd ")
End If
End Sub
End Clas
Public Class Form1
Private Sub TextBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
MsgBox("enter key pressd ")
End If
End Sub
End Class
答案 12 :(得分:0)
使用此代码可以正常工作。 您将单击TextBox1然后转到事件并选择Keyup并双击它。然后你将获得SUB的行。
Private Sub TextBox1_KeyUp(ByVal sender As System.Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp
If e.KeyCode = Keys.Enter Then
MsgBox("Fel lösenord")
End If
End Sub
答案 13 :(得分:0)
If Asc(e.KeyChar) = 13 Then
MessageBox.Show("Enter pressed!")
e.Handled = True
End If
答案 14 :(得分:0)
我已经在Visual Studio 2019上测试了此代码
效果出色
只需将其粘贴到您的表单代码中
它将以相同的形式在所有文本框中使用
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Dim keyCode As Keys = CType(msg.WParam, IntPtr).ToInt32
Const WM_KEYDOWN As Integer = &H100
If msg.Msg = WM_KEYDOWN AndAlso keyCode = Keys.Enter _
AndAlso Me.ActiveControl.GetType.Name = "TextBox" Then
Me.SelectNextControl(Me.ActiveControl, True, True, False, True)
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function