如何防止最小化父窗口关闭子窗口

时间:2020-03-14 09:52:37

标签: c# winforms desktop-application

美好的一天,

我想检查是否有人可以解决以下问题。我有一个使用ShowDialog(this)显示的子窗体,并且正在注册Resize事件,以便可以与该子窗体一起更改父窗体的状态。问题在于,当父窗体最小化时,子窗体将关闭。我已经确定,父级中的WindowState = FormWindowState.Minimized调用会导致using语句传递ShowDialog(IWin32Window)的阻塞调用,但是我不明白当只有孩子最小化时(父级是然后无法获得焦点),则阻止调用不会通过。我如何解决此问题?最好不要保留对子窗口的引用,并在每次父WindowState更改时都对其进行检查。

我的代码:

private void StockTakeHistoryMenu_Click(object sender, EventArgs e)
{
    using (StockTakeWindow window = new StockTakeWindow())
    {
        window.Resize += this.ChildStateChanging;
        window.ShowDialog(this);
        window.Resize -= this.ChildStateChanging;
    }
}

private void ChildStateChanging(object sender, EventArgs e)
{
    switch ((sender as Form).WindowState)
    {
        case FormWindowState.Normal:
            this.WindowState = FormWindowState.Normal;
            break;

        case FormWindowState.Minimized:
            this.WindowState = FormWindowState.Minimized;
            break;

        case FormWindowState.Maximized:
            this.WindowState = FormWindowState.Maximized;
            break;
    }
}

2 个答案:

答案 0 :(得分:2)

您可以使用此:

private void ChildStateChanging(object sender, EventArgs e)
{
    this.Show();

    switch ((sender as Form).WindowState)
    {
        case FormWindowState.Normal:
            this.WindowState = FormWindowState.Normal;
            break;

        case FormWindowState.Minimized:
            //this.WindowState = FormWindowState.Minimized;
            this.Hide();
            break;

        case FormWindowState.Maximized:
            this.WindowState = FormWindowState.Maximized;
            break;
    }
}

我先拨打this.Show();的{​​{1}}电话,然后写了 ChildStateChanging 而不是this.Hide()

答案 1 :(得分:-3)

在我目前正在设计c#win表单的过程中,我可以为您提供帮助。只是逐步描述它,我无法理解您的要求。 这个问题的解决方案(如何防止最小化父窗口关闭子窗口)是您需要使用自定义用户控件,并且当您单击位于自定义用户控件上的按钮时,只需在按钮click事件中编写代码,例如this.hide()。这将隐藏子控件,而不是父控件。

相关问题