在文本框中捕获Ctrl + C.

Bry*_*yan 16 c# textbox winforms

尽管我多年来一直使用C#(Windows Forms),但我有一个大脑失败的时刻,并且在我的生活中无法弄清楚如何捕获用户在文本框中键入Ctrl+ C.

我的应用程序基本上是一个终端应用程序,我希望Ctrl+ C发送(byte)3一个串口,而不是复制到剪贴板的快捷方式.

enabled在文本框中将快捷方式属性设置为false.然而,当用户点击Ctrl+时C,按键事件不会触发.

如果我抓住keydown,则当用户按下时Ctrl(即,在他们按下C键之前)事件将触发.

我很遗憾,这可能是一件非常简单的事情.

Jay*_*ggs 37

继续使用KeyDown事件,但在这种情况下检查 CtrlC,就像这样:

if (e.Control && e.KeyCode == Keys.C) {
    //...
    e.SuppressKeyPress = true;
}
Run Code Online (Sandbox Code Playgroud)

另外,为了防止底层TextBox处理击键,请将SuppressKeyPress属性设置为true,如图所示.


小智 6

关键事件按以下顺序发生:

  1. 的KeyDown
  2. 按键
  3. KEYUP

非字符键不会引发KeyPress事件; 但是,非字符键确实引发了KeyDown和KeyUp事件.控制是一个非字符键.

您可以查看以下代码行: if (e.KeyData == (Keys.Control | Keys.C))


Hac*_*cko 6

我赶上了一个问题Ctrl+ CTextBox通过KeyDown.我只拿到了Control关键的时候都ControlC被压.解决方案是使用 PreviewKeyDown:

private void OnLoad()
{
    textBox.PreviewKeyDown += OnPreviewKeyDown;
    textBox.KeyDown += OnKeyDown;
}

private void OnPreviewKeyDown( object sender, PreviewKeyDownEventArgs e)
{
    if (e.Control)
    {
        e.IsInputKey = true;
    }
}

private void OnKeyDown( object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.C) {
        textBox.Copy();
    }
}
Run Code Online (Sandbox Code Playgroud)