Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获Ctrl+;快捷键_C#_Winforms - Fatal编程技术网

C# 捕获Ctrl+;快捷键

C# 捕获Ctrl+;快捷键,c#,winforms,C#,Winforms,我需要在键盘上捕获kepress组合,以便覆盖标准函数,我尝试了以下方法: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.A) { MessageBox.Show("Hello"); } } 但是当按下Ctrl+A时,不会触发该消息。最终目的是覆盖Form1中DataGridView中的windo

我需要在键盘上捕获kepress组合,以便覆盖标准函数,我尝试了以下方法:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.A)
    {
        MessageBox.Show("Hello");
    }
}

但是当按下
Ctrl+A
时,不会触发该消息。最终目的是覆盖
Form1
DataGridView
中的windows快捷方式“全选”,以确保在表单窗口中按
Ctrl+a
时仅选择某些行。

首先,确保
Form1
属性

KeyPreview = true
接下来,不要忘记处理消息(您不希望
DataGridView
处理消息并执行
SelectAll

private void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.Control&&e.KeyCode==Keys.A)
{

e、 Handled=true;//通常,要处理快捷键,可以重写。通过重写此方法,可以处理键组合:

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
的方法:

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);
    }
}

尝试
e.Modifiers==Keys.Control&&e.KeyCode==Keys.A
Assign
Form1
KeyPreview=true
propertyThanks这是beastie,不过有一点值得注意的是…它一开始不起作用,因为我在表单KeyDown事件下设置了它,而不是在DataGridView KeyDown事件下设置的。当DataGridView出现在表单中时,它似乎是autOMATALY钩住Ctrl+A快捷键。请发布您的答案,以便我可以选择它作为解决方案;)@dmitry bychenko谢谢,我想这解决了我刚才描述的问题?要覆盖
ProcessCmdKey
,您不需要设置键预览。
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);
    }
}