回車鍵我有近20個文本框和5組合框,並依賴於另外一個控制形式, 現在我想要寫代碼的形式在這樣的方式,按輸入密鑰和標籤密鑰應該具有相同的功能。Tab鍵功能使用在VB.Net
就像按下Tab鍵重點也應進行重點轉移到接下來的控制,當我按下回車重點。 同樣,當我按下輸入鍵時,在按鍵事件中會寫入一些過程代碼,但當按下選項卡鍵時也應執行此操作。
回車鍵我有近20個文本框和5組合框,並依賴於另外一個控制形式, 現在我想要寫代碼的形式在這樣的方式,按輸入密鑰和標籤密鑰應該具有相同的功能。Tab鍵功能使用在VB.Net
就像按下Tab鍵重點也應進行重點轉移到接下來的控制,當我按下回車重點。 同樣,當我按下輸入鍵時,在按鍵事件中會寫入一些過程代碼,但當按下選項卡鍵時也應執行此操作。
,我在的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。
只是讓下面的函數
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事件
首先讓你的窗體的KeyPreview屬性=真 然後粘貼在窗體的keydown事件
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(Me.ActiveControl, True, True, True, False) 'for Select Next Control
End If
下面的代碼
我用於相同問題的一個更好的選擇是創建一個新的文本框類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從本頁獲取的單個文本框。
我能夠做到這一點,而無需爲每個控件手動創建或設置事件處理程序。在表單的初始化過程中,我運行一個循環遍歷每個控件的函數,並添加一個通用的處理函數。
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
此表單將用於提交數據嗎?我相信它可以完成,但修改典型的電源用戶密鑰做這似乎是一個壞主意...... – Matt