只要有一个带焦点的只读文本框,就无法在keydown事件上检测到Ctrl + Key快捷方式

我以为我自己解决了这个问题,但它回来困扰我的应用程序,所以在这里:

我有一个以几个禁用和只读文本框的forms注册的以下keydown事件处理程序,它们只是按钮的简单快捷方式:

private void AccountViewForm_KeyDown(object sender, KeyEventArgs e) { //e.SuppressKeyPress = true; //e.Handled = true; if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.E && !isInEditMode) btnEditMode_Click(sender, e); if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S && isInEditMode) btnEditMode_Click(sender, e); if (e.KeyCode == Keys.Escape) btnCancel_Click(sender, e); if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.W) Close(); } 

表单将KeyPreview设置为true,但只要readonly文本框具有焦点,并按Ctrl + E,我就无法获得“Control.ModifierKeys == Keys.Control”和“e.KeyCode == Keys.E”两者都是true同时。 真正奇怪的是Ctrl + W有效。 任何人都知道到底是怎么回事? 🙁

根据这个问题和这个问题 ,看起来处理键盘快捷键的一般方法是覆盖ProcessCmdKey()方法:

 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.F)) { MessageBox.Show("What the Ctrl+F?"); return true; } return base.ProcessCmdKey(ref msg, keyData); } 

您是否考虑过使用Alt + EAlt + S并仅为按钮设置助记符属性? 这对我来说似乎很有效,并且设置起来更容易。