VB.NET에서 Enter 키를 누르는 중
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
하지만 저한테는 효과가 없어요.
해결책은 무엇일까?
키다운 이벤트:
If e.KeyCode = Keys.Enter Then
Messagebox.Show("Enter key pressed")
end if
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
KeyPreview Property를 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 키를 누르면 컨트롤이 다음 컨트롤로 이동합니다.
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
매력적으로 작동합니다!
미리보기 키다운 이벤트를 사용할 수 있습니다.
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에서 테스트됨
다음을 시도할 수도 있습니다.
If e.KeyChar = ChrW(Keys.Enter) Then
'Do Necessary code here
End If
답변이 완료되었지만 양식의 Accept 버튼에 유효성 검사를 걸기만 하면 엔터 키의 모든 '리매핑'을 피할 수 있을 것 같습니다.즉, 3개의 텍스트 상자(txtA, txtB, txtC)와 '확인' 버튼이 AcceptButton(및 TabOrder가 올바르게 설정됨)으로 설정됩니다.따라서 txtA에서 Enter 키를 누른 경우 데이터가 유효하지 않으면 포커스가 txtA에 유지되지만, 유효한 경우 다른 txt가 입력이 필요하다고 가정하면 유효성 검사는 유효한 입력이 필요한 다음 txt로 이동하여 Tab 동작을 시뮬레이션합니다.모든 txt가 유효한 입력을 받으면 Enter 키를 누르면 성공적인 유효성 검사가 실행되고 양식이 닫힙니다(또는 어떤 식으로든...). 이해가 됩니까?
Private Sub SomeTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles SomeTextBox.KeyPress
If Asc(e.KeyChar) = 13 Then
MessageBox.Show("Enter pressed!")
e.Handled = True
End If
End Sub
KeyPress 대신 KeyDown 이벤트 사용
If e.KeyCode = Keys.Enter Then
MsgBox ("You pressed enter")
End if
참고: 양식에 ACCEPT BUTTON이 설정되어 있지 않은지 확인합니다.AcceptButton은 '없음'으로 설정합니다.
저도 같은 문제가 있었는데 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
그런 다음 텍스트 상자에서 이벤트 키를 아래로 누릅니다.답 중 하나는 올바른 경로에 있었지만 e를 설정하지 못했습니다.입력 키입니다.
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
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
이 코드를 사용하면 사용자가 Enter 키를 누를 때 동작과 같은 탭을 얻는 데 도움이 될 수 있습니다.
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
다음 코드가 작동합니다.
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
이 코드를 사용하면 정상적으로 작동합니다.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
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
언급URL : https://stackoverflow.com/questions/2752424/detecting-enter-keypress-on-vb-net
'programing' 카테고리의 다른 글
VB.NET - 문자열에 "value1" 또는 "value2"가 포함된 경우 (0) | 2023.05.23 |
---|---|
제공된 잠금이 잘못되었습니다.잠금이 만료되었거나 메시지가 대기열에서 이미 제거되었습니다. (0) | 2023.05.23 |
WPF를 사용하여 레이블에서 텍스트를 랩핑하려면 어떻게 해야 합니까? (0) | 2023.05.23 |
UPSERT 방법(MERGE, INSERT...)PostgreSQL에서 중복 업데이트 시)? (0) | 2023.05.23 |
NameError: 'reload' 이름이 정의되지 않았습니다. (0) | 2023.05.18 |