C#无法处理文本框的Ctrl+K事件
Posted
技术标签:
【中文标题】C#无法处理文本框的Ctrl+K事件【英文标题】:C# Cannot handle Ctrl+K event of textbox 【发布时间】:2016-05-10 09:16:02 【问题描述】:当用户在文本框上按下Ctrl + K
时,我想执行一些操作。
private void subject_TextBox_KeyDown(object sender, KeyEventArgs e)
if (e.Control && e.KeyCode == Keys.K)
MessageBox.Show("!");
当我运行它时没有任何反应。
当我调试时,我可以看到 e.Control
为真(这意味着我按下了 Ctrl)但 e.KeyCode
不等同于 K。
有什么想法吗?
【问题讨论】:
@Ivar, 76 还是 Shift,这绝对不对:我按 Ctrl _K。 @user3165438:- 试试if (e.KeyData == (Keys.Control | Keys.K))
我试过你的代码,它对我来说很好用。通过将断点设置为MessageBox.Show("!");
e.KeyCode
是 75。
LButton
是您的鼠标左键。你有没有机会点击它?
@Ivar,一点也不。有什么想法???
【参考方案1】:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
if (keyData == (Keys.Control | Keys.K) && focusedTextbox == subject_TextBox)
//Some Code
private TextBox focusedTextbox = null;
private void subject_TextBox_KeyDown(object sender, KeyEventArgs e)
MethodName(e.KeyCode)
private void MethodName(Keys keys)
focusedTextbox = (TextBox)sender;
使用此代码,这应该可以工作,我自己测试过,它会工作,你会想在每个文本框中运行“MethodName”方法,或者如果你能找到更好的方法来更改“focusedTextBox”字段然后这样做希望这会有所帮助。
【讨论】:
我自己正确测试这个我发现使用 KeyDown 不起作用,因为它一次需要一个键,所以它只会得到第一个键 谢谢,这可能是问题的原因。赞成。 没问题,如果正确,请勾选,这样当人们提出这个问题时,他们就会知道答案【参考方案2】:在KeyDown event
中,您只需询问键盘的“状态”。
你可能想看看这个主题:
Capture multiple key downs in C#
【讨论】:
【参考方案3】:真的不知道是什么问题原因。
可以在按下Ctrl
后立即触发事件,而无需等待K
也被按下。
但是,当我在 TextBox_KeyUp
事件中使用相同的代码时,它可以正常工作。
【讨论】:
以上是关于C#无法处理文本框的Ctrl+K事件的主要内容,如果未能解决你的问题,请参考以下文章
在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声