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

fra*_*cis 12 .net c# winforms

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

我有一个注册表单中的以下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();
}
Run Code Online (Sandbox Code Playgroud)

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

Don*_*kby 21

根据这个问题,并且这一个,它看起来像处理键盘快捷键更普遍的方法是重写给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);
}
Run Code Online (Sandbox Code Playgroud)

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