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#中,文本框不能粘贴功能

在文本框 (C#) 中使用 ctrl+A 时播放 Windows“叮”声

PyQt5中文本框的OnClick事件? [复制]

请问一下,C# js里面文本框的改变事件怎么写(主要是实现给用户发送信息,绑定2个文本框,一个存id)

C#中如何检查文本框的输入信息是不是为数字?

ReadOnly与Enabled