2011-12-06 95 views
3

回車鍵我有近20個文本框和5組合框,並依賴於另外一個控制形式, 現在我想要寫代碼的形式在這樣的方式,按輸入密鑰和標籤密鑰應該具有相同的功能。Tab鍵功能使用在VB.Net

就像按下Tab鍵重點也應進行重點轉移到接下來的控制,當我按下回車重點。 同樣,當我按下輸入鍵時,在按鍵事件中會寫入一些過程代碼,但當按下選項卡鍵時也應執行此操作。

+0

此表單將用於提交數據嗎?我相信它可以完成,但修改典型的電源用戶密鑰做這似乎是一個壞主意...... – Matt

回答

5

,我在的WinForms實現它的方式是使用SelectNextControl方法。

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 

如果您正在使用WPF可以使用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

1

只是讓下面的函數

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事件

4

首先讓你的窗體的KeyPreview屬性=真 然後粘貼在窗體的keydown事件

If e.KeyCode = Keys.Enter Then 
    Me.SelectNextControl(Me.ActiveControl, True, True, True, False) 'for Select Next Control 
End If 
下面的代碼
0

我用於相同問題的一個更好的選擇是創建一個新的文本框類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