Vb.net ProcessCmdKey如何在发送文本之前更改焦点
我有一个表单,只有一个文本框和一个datagridview。我想当用户按下箭头(向上/向下)时,它会通过datagridview浏览,当用户按下任何其他键时,它会发送到textbox 它不工作,当datagridview具有焦点并且用户按下字母键时,它将焦点更改为textbox,但不发送文本 我的代码:Vb.net ProcessCmdKey如何在发送文本之前更改焦点,vb.net,focus,Vb.net,Focus,我有一个表单,只有一个文本框和一个datagridview。我想当用户按下箭头(向上/向下)时,它会通过datagridview浏览,当用户按下任何其他键时,它会发送到textbox 它不工作,当datagridview具有焦点并且用户按下字母键时,它将焦点更改为textbox,但不发送文本 我的代码: Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyDa
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Down Or keyData = Keys.Up Then
grid.Focus()
Return MyBase.ProcessCmdKey(msg, keyData)
ElseIf Not Me.ActiveControl.Equals(txtFiltro) Then
Me.ActiveControl = txtFiltro
txtFiltro.Focus()
txtFiltro.Select()
Return MyBase.ProcessCmdKey(msg, keyData)
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
在更改焦点之前发送密钥…:(您需要确保在包含DataGridView和TextBox的表单上将属性“KeyPreview”设置为true 然后,在窗体的键控事件中,尝试以下操作:
Private Sub Form1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyCode = Keys.Up Or e.KeyCode = Keys.Down Then
DataGridView1.Focus()
Else
e.Handled = True
TextBox1.Focus()
If TextBox1.TextLength = 0 Then
TextBox1.Text += ChrW(e.KeyValue)
TextBox1.SelectionStart = 1
End If
End If
End Sub
最后一部分将查看是否希望将按下的任何键传递到文本框。如果不需要,可以忽略该键。然后,如果返回使用箭头键,则应重新聚焦到DataGridView
可能不完全是您想要的。但我认为它可以让您走上正确的轨道。它不起作用…第一次按任何键时,它会发送重复的文本,我必须按两次才能获得焦点。。。。