项目场景:
一个winform消息提示框,底部俩按钮。必须点击按钮,不允许回车键触发按钮的click事件
问题描述:
不管是按钮的keypress事件还是form的keypress事件都无法拦截。
form的AcceptButtion也是设置的null,回车还是会触发左边按钮的click事件。
改变按钮的TabIndex回车键会触发值更小的那个按钮(如果有这种需求可以考虑这个方案😀)
打断点发现这3个键盘事件都没有进:
private void MessageBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
e.Handled = true;
}
}
private void CancelBtn_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
e.Handled = true;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (e.KeyChar == (Char)Keys.Enter)
{
e.Handled = true;
}
else
{
base.OnKeyPress(e);
}
}
原因分析:
各种百度结果都指向键盘事件。
一度怀疑我用的SunnyUI,form继承的UIForm有啥拦截处理,又是看源码又是找资料,结论也不是。
最后在重写方法列表里面看到了ProcessDialogKey方法,灵光一闪,窗体不就是以showDialog方式打开的么。
解决方案:
重写ProcessDialogKey方法:
protected override bool ProcessDialogKey(Keys keyData)
{
//屏蔽回车键
if (keyData == Keys.Enter)
{
return true;
}
return base.ProcessDialogKey(keyData);
}
问题完美解决