为什么父窗体响应子窗体的快捷键

本文关键字:窗体 快捷键 响应 为什么 | 更新日期: 2023-09-27 18:07:46

c# WinForms:我有一个MDI表单,我为它的菜单定义了一些快捷键,例如"ALT+C"来打开操作工具栏按钮。问题是,如果我在父窗体内打开此子窗体,但我仍然在父窗体内的某个地方单击鼠标并按"ACLT+C",它仍然响应它并打开子窗体的"Actions"菜单。我该如何预防呢?

为什么父窗体响应子窗体的快捷键

在表单上添加一个标志

bool actionWindow = false

然后当窗口打开时设置actionWindow为true。在监听器中检查actionWindow。然后,当actionWindow关闭时,将bool设置回false。

try:在子窗体中put e.Handled = true;

可能有更好的解决方案,但一个快速的方法是测试表单是否有焦点。因此,在子事件处理程序中,在顶部添加以下内容:

if ( this.MdiParent.ActiveControl.Name != this.Name )
{
    return;
}

显然,这并不是阻止事件触发,只是阻止后续代码运行。

编辑:如果菜单项没有事件处理程序,我能想到的唯一其他方法是为子窗体的EnterLeave事件创建处理程序:
private void ChildForm_Leave( object sender, EventArgs e )
{
    menuItem.Enabled = false;
}
private void ChildForm_Enter( object sender, EventArgs e )
{
    menuItem.Enabled = true;
}