首先,网上绝大部分是如下方案:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Space || e.KeyCode == Keys.Enter)//屏蔽空格键、Enter键触发按钮
{
e.Handled = true;//表示已经处理了键盘消息
}
}
但是,上述办法只能屏蔽空格键(Space),但对回车键(Enter)无效,断点调试发现按下回车键(Enter)根本不触发上述事件。
经过多次尝试,最终就有了下述代码成功解决问题:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Space || keyData == Keys.Enter)//屏蔽空格键、Enter键触发按钮
{
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
这是覆盖了窗体的ProcessCmdKey
方法,成功拦截了键盘事件。