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事件,但在这种情况下检查既 Ctrl和C,就像这样:
if (e.Control && e.KeyCode == Keys.C) {
//...
e.SuppressKeyPress = true;
}
Run Code Online (Sandbox Code Playgroud)
另外,为了防止底层TextBox处理击键,请将SuppressKeyPress属性设置为true,如图所示.
小智 6
关键事件按以下顺序发生:
非字符键不会引发KeyPress事件; 但是,非字符键确实引发了KeyDown和KeyUp事件.控制是一个非字符键.
您可以查看以下代码行:
if (e.KeyData == (Keys.Control | Keys.C))
我赶上了一个问题Ctrl+ C上TextBox通过KeyDown.我只拿到了Control关键的时候都Control和C被压.解决方案是使用 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)