Обнаружение Enter keypress на VB.NET
Я использую среду .NET 3.5 для VB.NET 2008.
У меня есть текстовые поля в моей форме. Я хочу поведение типа tab, когда мой пользователь нажимает 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
Но это не работает для меня.
Какое решение?
Ответы
Ответ 1
Нет необходимости устанавливать для свойства 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
Теперь, когда вы нажимаете Enter в текстовом поле, элемент управления переходит к следующему элементу управления.
Ответ 2
В событии KeyDown:
If e.KeyCode = Keys.Enter Then
Messagebox.Show("Enter key pressed")
end if
Ответ 3
Убедитесь, что для свойства 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
Ответ 4
Я использую 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
Работает как шарм!
Ответ 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
Ответ 6
также может попробовать следующее:
If e.KeyChar = ChrW(Keys.Enter) Then
'Do Necessary code here
End If
Ответ 7
Я вижу, что на это был дан ответ, но похоже, что вы можете избежать всего этого "переназначения" ключа ввода, просто подключив свою проверку в AcceptButton в форме. то есть. у вас есть 3 текстовых поля (txtA, txtB, txtC) и кнопка "OK", установленная как AcceptButton (и TabOrder установлена правильно). Итак, если в txtA и вы нажмете enter, если данные недействительны, ваш фокус останется в txtA, но если он действителен, если предположить, что другие txts нуждаются в вводе, проверка будет просто помещать вас в следующий txt, который требует действительного ввода, таким образом имитируя поведение TAB... как только все txts имеют действительный ввод, нажатие enter приведет к успешной проверке и закрытию формы (или что-то еще...) Имеет смысл?
Ответ 8
У меня была такая же проблема, и я не мог заставить этот ответ работать над 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
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
используйте этот код, это может помочь вам получить вкладку, например, когда пользователь нажимает кнопку ввода
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
Следующий код будет работать.
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
Используйте этот код, он будет работать нормально.
Вы нажимаете на 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
If Asc(e.KeyChar) = 13 Then
MessageBox.Show("Enter pressed!")
e.Handled = True
End If
Ответ 14
Если e.KeyCode = 13 Тогда
SendKeys.Send({ "TAB" })
'Инструкции
End If