2011-12-06 3 views
3

거의 20 Textbox 및 5 Combobox 및 다른 하나의 컨트롤에 종속 된 양식 이제 양식에 대한 코드를 다음과 같은 방식으로 작성하려고합니다. 를 누름 키와 을 입력하십시오. 키는 동일한 기능을 가져야합니다.Tab 키 기능 VB.Net에서 Enter 키 사용

처럼 나는 키를 Enter 키를 누르면 탭 다음 컨트롤로 포커스가 이동도 수행해야 키를 누르면합니다. 마찬가지로 키를 누를 때 키를 입력하면 키 누름 이벤트에 기록 된 프로세스 코드가 있지만 키를 누를 때도 수행해야합니다.

+0

이 양식을 사용하여 데이터를 제출합니까? 나는 그것을 할 수 있다고 확신하지만, 전형적인 파워 유저 키를 수정하는 것은 나쁜 생각처럼 보인다. ... – Matt

답변

5

내가 윈폼에서 그것을 달성 한 방법은 SelectNextControl 방법을 사용하는 것입니다. 당신이 WPF를 사용하는 경우

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 

당신이 사용할 수있는 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 

마찬가지로 지금까지 탭을 가로로 키이 Stackoverflow question를보십시오.

-2

당신은 어떤 자바 스크립트로 작업을 수행 할 수 있습니다 Enter Key Focus

+0

질문은 vb.net에 관한 것이다. – emaillenin

1

단순히 당신의 폼의 KeyPreview 속성이 = 사실 확인 컨트롤의를 keyDown 이벤트

4

처음에 기능을

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 

호출이 기능을 다음과 같은 확인하고 양식의에서 KeyDown 이벤트

If e.KeyCode = Keys.Enter Then 
    Me.SelectNextControl(Me.ActiveControl, True, True, True, False) 'for Select Next Control 
End If 
을에 아래의 코드를 붙여 넣기
0

동일한 문제에 대해 더 나은 옵션을 사용하려면 새 textbox 클래스 인 textboxClass를 만들고 다음과 같은 c 키 누르기 이벤트에서의 ode

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 

이제 모든 양식에 원하는만큼의 텍스트 상자를 추가 할 수 있습니다. 원하는대로 작동합니다. 마지막 텍스트 상자에서 엔터를 누르면 포커스가 첫 번째 텍스트 상자로 이동합니다.

이 코드는 @Mark Hall에서 가져온 것으로,이 페이지의 텍스트 상자 하나로 만 제공됩니다.

1

각 컨트롤에 대한 이벤트 처리기를 수동으로 만들거나 설정하지 않고도이 작업을 수행 할 수있었습니다. 폼 초기화시 모든 컨트롤을 반복하고 일반 핸들러 함수를 추가하는 함수를 실행합니다.

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