C# 如何检测win form应用程序中的两个热键,如CTRL+;C,CTRL+;W

C# 如何检测win form应用程序中的两个热键,如CTRL+;C,CTRL+;W,c#,winforms,C#,Winforms,我的问题是如何在win form应用程序中检测两个热键 类似于VisualStudio的CTRL+C、CTRL、K注释命令 我需要模拟VS热键来注释一行代码如果要处理Ctrl+C后跟Ctrl+K,则需要维护一个状态变量 private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C) { } }

我的问题是如何在win form应用程序中检测两个热键 类似于VisualStudio的CTRL+C、CTRL、K注释命令

我需要模拟VS热键来注释一行代码

如果要处理Ctrl+C后跟Ctrl+K,则需要维护一个状态变量

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   if (e.Modifiers == Keys.Control && e.KeyCode == Keys.C)
   {

   }
}
将表单
KeyPreview
属性设置为
true
并处理表单
KeyDown
事件

试试这个:

   this.KeyPreview=true;
   private bool isFirstKeyPressed= false;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.C)
        {               
            isFirstKeyPressed = true;                
        }


        if (isFirstKeyPressed)
        {
            if (e.Control && e.KeyCode == Keys.K)
            {
                MessageBox.Show("Ctrl+C and Ctrl+K pressed Sequentially");
                /*write your code here*/
                isFirstKeyPressed= false;
            }
        }
    }

简单的方法是。。。有一个名为ProcessCmdKey的Windows API函数,通过重写该函数,我们可以实现我们想要的

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
   if (keyData == (Keys.Control | Keys.C)) {
      MessageBox.Show("You have pressed the shortcut Ctrl+C");
      return true;
   }
   return base.ProcessCmdKey(ref msg, keyData);
}
可以找到Microsoft文档


当你从其他人那里得到答案时,请给出归属。事实上,我给出了原始帖子的链接。你喜欢的是第二个重复他问如何检测序列-Ctrl+C,然后是Ctrl+K-不是一个独立于另一个的。@MattDavis这正是我想要的want@mohammedsameeh:如果您想按顺序处理两个热键,则需要检查
顺序
,检查我的答案。
isFirstKeyPressed
在设置为true后,在任何情况下都应该重置为false,对吗?是的,必须重置,但如果用户按
Ctrl+C
Ctrl
在按下
K
之前,
isFirstKeyPressed
将变为false。@Sudhakardipudi您的代码是正确的,但它遗漏了一件重要的事情,如果您按下(Ctrl+C),然后再按任意字符,然后执行(Ctrl+W),我将发布代码,谢谢
private bool _isFirstKeyPressedW = false;

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control & e.KeyCode == Keys.W) 
    {
        _isFirstKeyPressedW = true;
    }
    if (_isFirstKeyPressedW) 
    {
        if (e.Control & e.KeyCode == Keys.S) 
        {
            //write your code 
        } 
        else 
        {
            _isFirstKeyPressedW = e.KeyCode == Keys.W;
        }
    }
}