如何使用Alt + F4键关闭子窗口?

时间:2013-07-03 18:55:21

标签: c# winforms mdichild

Alt + F4 是关闭表单的快捷方式。 当我在MDI环境中使用此快捷方式时,应用程序将关闭,因此 显然,快捷方式适用于'容器',而不适用于 'Childform'。

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

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

有人,可以告诉你注册 Alt + F4 还是更好的东西

2 个答案:

答案 0 :(得分:-1)

您可以更改winform中的void Dispose(bool disposing)方法,以关闭您的子表单,如下所示:

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 :(得分:-1)

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

第1步:使用这种简单的逻辑使用 Alt + F4 触发MDI子窗体的关闭。

private void child_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Alt && e.KeyCode == Keys.F4) 
    {
        this.Close();
    }
}

步骤2:还可以使用此技巧来禁用影响父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;
    }    
}