C# 捕获Ctrl+;快捷键
我需要在键盘上捕获kepress组合,以便覆盖标准函数,我尝试了以下方法: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
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
AssignForm1
的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);
}
}