0

Alt+F4是关闭表单的快捷方式。当我在 MDI 环境中使用此快捷方式时,应用程序已关闭,因此显然该快捷方式适用于“容器”而不是“子窗体”。

捕获此事件并关闭活动子项而不是容器的最佳做法是什么

我阅读了有关在 MDI 激活时将Alt+注册为热键的信息。F4当 MDI 停用时,取消注册热键。因此,热键不会影响其他窗口。

有人,可以告诉我注册Alt+F4或更好的东西

4

2 回答 2

-1

您可以更改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);
}
于 2013-07-03T19:06:24.133 回答
-1

由于还没有人真正回答过这个问题,因此可以通过以下两个步骤来完成:

第 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;
    }    
}
于 2019-09-14T00:25:50.500 回答