我需要在键盘上捕获一个按键组合,以便我可以覆盖标准功能,我已经尝试了以下内容:
Ctrl+A
但是当按DataGridView
时,不会触发消息。最终目的是覆盖窗口快捷方式'选择所有'在Form1
中的Ctrl+A
内,以确保在表单窗口中按下{{1}}时仅选择了某些行。
答案 0 :(得分:2)
首先,确保Form1
属性
KeyPreview = true
接下来,不要忘记处理邮件(您不希望DataGridView
处理邮件并执行SelectAll
)
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.A)
{
e.Handled = true; // <- do not pass the event to DataGridView
MessageBox.Show("Hello");
}
}
所以你在KeyDown
(Form1
)预览 KeyPreview = true
,执行必要的操作,阻止 {{1执行选择所有(DataGridView
)
答案 1 :(得分:0)
通常,为了处理快捷键,您可以覆盖ProcessCmdKey
。通过重写此方法,您可以处理组合键:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.Control | Keys.A))
{
MessageBox.Show("Control + A");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
返回true
,表示它由您的代码处理,密钥不会传递给子控件。因此,在表单级别覆盖此方法就足够了。
但如果您专门讨论DataGridView
来自定义Ctrl + A
组合,则可以覆盖DataGridView
的{{3}}方法:
public class MyDataGridView : DataGridView
{
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
if (e.KeyData == (Keys.A | Keys.Control))
{
MessageBox.Show("Handled");
return true;
}
return base.ProcessDataGridViewKey(e);
}
}