奇怪的问题。我们有两种形式:主应用程序窗口和设置表单。主窗体的 KeyPreview 设置为true,并且附加到 KeyUp 事件的方法。这样可以使用快捷键(ctrl-m)打开设置窗口:
private void MyShortcuts(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.M)
{
e.Handled = true;
e.SuppressKeyPress = true;
MySettings sett = new MySettings();
sett.Show();
}
}
现在,这一点工作正常。但问题是,尽管将 Handled 和 SuppressKeyPress 属性设置为 true ,仍然会传递 KeyUp 事件到MySettings
表格。我已将此跟踪到ControlNativeWindow.OnMessage
接收看似不同的事件(其 Handled 和 SuppressKeyPress 属性设置为false),并将其传递给形式及其集中控制。
任何想法都会受到高度赞赏,我自己也用完了。
答案 0 :(得分:2)
这里发生的是M
和CTRL
键正在引发两个单独的KeyUp
事件(这是正常行为)。当您按CTRL
然后M
,然后将手指从M
键抬起时,会引发KeyUp
事件,主表单上的处理程序会捕获并使用显示设置表单。然后,您将手指从CTRL
键移开,这会引发另一个KeyUp
事件(这次是在设置表单上,现在是活动表单)。
在设置表单上,您只需检查e.Control
并忽略该事件true
。
答案 1 :(得分:0)
您应该使用KeyDown事件代替KeyUp事件。
如果你看一下你会看到的documentation,那么在KeyUp事件发生之前,将会抛出一个KeyPress事件,这将被你的设置表单捕获。