C#WinForms:我有一个MDI表单,我为其菜单定义了一些快捷键,例如“ALT + C”以打开“动作”工具栏按钮。问题是,如果我在父窗体中打开这个子窗体但仍然在父窗体内的某处单击鼠标并按“ACLT + C”它仍然响应它并打开子窗体的“操作”菜单。我该如何防止这种情况?
答案 0 :(得分:1)
在表单上添加标记
bool actionWindow = false
然后当窗口打开时将actionWindow设置为true。在你的监听器中检查actionWindow。然后当actionWindow关闭时,将bool设置为false。
尝试:在子表单中输入e.Handled = true;在重点新闻发布会上。
答案 1 :(得分:1)
可能有一个更好的解决方案,但一个快速的方法是测试表单是否有焦点。因此,在您的子事件处理程序中,在顶部添加以下内容:
if ( this.MdiParent.ActiveControl.Name != this.Name )
{
return;
}
显然,这并不会阻止事件触发,只是阻止后续代码运行。
编辑:如果菜单项没有事件处理程序,我可以想到的另一种方法是为子表单的Enter
和Leave
事件创建处理程序:
private void ChildForm_Leave( object sender, EventArgs e )
{
menuItem.Enabled = false;
}
private void ChildForm_Enter( object sender, EventArgs e )
{
menuItem.Enabled = true;
}