我有一个带有文本框和数据网格视图的表单。我希望当用户按下箭头(向上/向下)时,它会浏览datagridview,当用户按下任何其他键时,它会发送到文本框。
它不起作用,当datagridview具有焦点并且用户按下字母键时,它会将焦点更改为文本框,但不会发送任何文本。
我的代码:
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
密钥在更改焦点之前发送... :(
答案 0 :(得分:0)
您需要确保在包含DataGridView和TextBox的表单上将属性“KeyPreview”设置为true。
然后在您的表单的KeyDown事件上尝试这样的事情:
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。
可能不完全是你想要的。但我认为它可以让你走上正轨。