捕获Ctrl + A快捷键

时间:2018-02-15 10:08:50

标签: c# winforms

我需要在键盘上捕获一个按键组合,以便我可以覆盖标准功能,我已经尝试了以下内容:

Ctrl+A

但是当按DataGridView时,不会触发消息。最终目的是覆盖窗口快捷方式'选择所有'在Form1中的Ctrl+A内,以确保在表单窗口中按下{{1}}时仅选择了某些行。

2 个答案:

答案 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");
    }
}

所以你在KeyDownForm1预览 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);
    }
}