it-swarm.com.ru

Обнаружение нажатия клавиши Enter на VB.NET

Я использую .NET 3.5 Framework VB.NET 2008.

У меня есть несколько текстовых полей в моей форме. Мне нужно поведение, похожее на вкладку, когда мой пользователь нажимает 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

Но это не работает для меня.

Каково решение?

21
Tareq

Нет необходимости устанавливать для свойства 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 в TextBox, элемент управления переходит к следующему элементу управления.

10
Tareq

В событии KeyDown:

 If e.KeyCode = Keys.Enter Then
       Messagebox.Show("Enter key pressed")
 end if
34
Dinidu Hewage

Убедитесь, что для свойства 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
21
Eric Schneider

Я использую 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

Работает как шарм!

9
EConway

Вы можете использовать PreviewKeyDown Event

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
Dung Vu

также можете попробовать это: 

If e.KeyChar = ChrW(Keys.Enter) Then
     'Do Necessary code here
End If
3
Ika

Я вижу, что на этот вопрос уже получен ответ, но кажется, что вы могли бы избежать всего этого «переназначения» клавиши ввода, просто подключив свою проверку к AcceptButton на форме. то есть. у вас есть 3 текстовых поля (txtA, txtB, txtC) и кнопка «ОК», установленная в AcceptButton (и TabOrder установлен правильно). Таким образом, если в txtA и вы нажмете Enter, если данные недействительны, ваш фокус останется в txtA, но если он действителен, предполагая, что другие txts требуют ввода, проверка просто поместит вас в следующий txt, который нуждается в действительном вводе, таким образом симуляция поведения TAB ... как только все txts имеют действительный ввод, нажатие Enter вызовет успешную проверку и закроет форму (или что-то еще ...) Имеет смысл?

3
halfacreSal

Используйте KeyDown Event вместо KeyPress

If e.KeyCode = Keys.Enter Then
   MsgBox ("You pressed enter")
End if

Примечание. Убедитесь, что на форме не установлена ​​кнопка ПРИНЯТЬ. AcceptButton установил для него «нет»

1
Herbert Yeo

используйте этот код, это может помочь вам получить поведение, подобное вкладке, когда пользователь нажимает ввод 

 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
0
Lord_of_Lucifer
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
0
Ameer Chand

У меня была та же проблема, и я не мог заставить этот ответ работать на 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
0
user4509414

Используйте этот код, он будет работать ОК . Вы должны нажать на 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
0
Björn Edoff

Следующий код будет работать.

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
0
Björn Edoff
If Asc(e.KeyChar) = 13 Then
 MessageBox.Show("Enter pressed!")
 e.Handled = True
End If
0
Alexander Malygin