C# .NET - 首先释放 ctrl 时不触发 ctrl-c 键

本文关键字:ctrl-c ctrl NET 释放 | 更新日期: 2023-09-27 18:35:28

我有一个捕获KeyUp事件的DataGridView。我用它来捕获键盘副本(Ctrl-C),然后执行我自己的格式化复制的文本。当我发布"C"时,一切都可以正常工作键先,但是如果我先释放"ctrl",同时仍然按住"C",它会不会触发事件。下面是事件的代码。我是已经在复制上下文菜单项上处理它,但我知道我会有使用键盘快捷键的用户,我宁愿拥有一切按预期工作。任何想法都值得赞赏。

  /// <summary>
  /// Key up event handler
  /// </summary>
  void Control_KeyUp(object sender, KeyEventArgs e)
    {          
        if (e.KeyCode == Keys.C && e.Control == true )
        {
            CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());               
        }
    }       

C# .NET - 首先释放 ctrl 时不触发 ctrl-c 键

public bool CtrlPressed=false;
void Control_KeyUp(object sender, KeyEventArgs e)
{          
    if (e.KeyCode == Keys.C && ctrlPressed == true )
    {
        CopyToClipboard(dgDS408Parameter.CurrentCell.EditedFormattedValue.ToString());                           
    }
    CtrlPressed=false;
}   
void Control_KeyDown(object sender, KeyEventArgs e)
{          
    if (e.Control == true )
    {
        CtrlPressed=true;
    }
}

我把它写在我的脑海里,没有经过测试,但想法是这样的。

为什么要使用键控事件?所有其他程序在按键上都做同样的事情。将您的活动从KeyUp更改为KeyDown,一切都会好起来的。

我认为你写的代码有逻辑错误

e.KeyCode == Keys.C && e.Control == true

这意味着"C"和"Cnt"两个键都必须在按下状态时任何键触发键启动事件。

所以这里发生的事情是当你按 Cnt + C 时,它没问题,但是当你先释放"ctrl"时,条件是错误的

e.KeyCode == Keys.C && e.Control == true

这就是为什么您的数据不会复制到剪贴板中的原因