Alt+F4是关闭表单的快捷方式。当我在 MDI 环境中使用此快捷方式时,应用程序已关闭,因此显然该快捷方式适用于“容器”而不是“子窗体”。
捕获此事件并关闭活动子项而不是容器的最佳做法是什么
我阅读了有关在 MDI 激活时将Alt+注册为热键的信息。F4当 MDI 停用时,取消注册热键。因此,热键不会影响其他窗口。
有人,可以告诉我注册Alt+F4或更好的东西
您可以更改void Dispose(bool disposing)
winform 中的方法以关闭子表单,如下所示:
protected override void Dispose(bool disposing)
{
if (/* you need to close a child form */)
{
// close the child form, maybe by calling its Dispose method
}
else
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}
编辑:正如我的评论者所说,Dispose
您应该只重写该OnFormClosing
方法,而不是修改被覆盖的方法,如下所示:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (/* you need to close the child form */)
{
e.Cancel = true;
// close the child form, maybe with childForm.Close();
}
else
base.OnFormClosing(e);
}
由于还没有人真正回答过这个问题,因此可以通过以下两个步骤来完成:
第 1 步:Alt使用这个简单的逻辑来触发使用+关闭 MDI 子窗体F4。
private void child_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Alt && e.KeyCode == Keys.F4)
{
this.Close();
}
}
第 2 步:也使用此 hack 来禁用影响父 MDI 表单的Alt+效果。F4
private void parent_FormClosing(object sender, FormClosingEventArgs e)
{
// note the use of logical OR instead of logical AND here
if (Control.ModifierKeys == Keys.Alt || Control.ModifierKeys == Keys.F4)
{
e.Cancel = true;
return;
}
}