当主窗体最小化时,C#WinForms最小化frm.Show()

当主窗体最小化时,C#WinForms最小化frm.Show(),c#,winforms,C#,Winforms,我有一个显示覆盖表单的Windows表单: private void ShowWait() { frmOverlay = new Base.frmOverlay("Please Wait..."); frmOverlay.Show(this); } 此代码> FRMOVLADE< /代码>窗体同时显示中间显示的另一种形式(消息形式): 当我最小化主窗体时,我仍然可以看到frmPleaseWait窗体,是否有一种方法可以在最小化主窗体时最小化所有窗体?您

我有一个显示覆盖表单的Windows表单:

private void ShowWait()
{             
    frmOverlay = new Base.frmOverlay("Please Wait...");
    frmOverlay.Show(this);
}

此代码> FRMOVLADE< /代码>窗体同时显示中间显示的另一种形式(消息形式):


当我最小化主窗体时,我仍然可以看到
frmPleaseWait
窗体,是否有一种方法可以在最小化主窗体时最小化所有窗体?

您可以为resize事件创建一个Eventhandler,并在其中最小化窗体:

Form2 f2 = null;

private void button1_Click(object sender, EventArgs e)
{
   f2 = new Form2(); 
   f2.Show();
}

private void Form1_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
    {
        f2.WindowState = FormWindowState.Minimized;
    }
}

将该代码添加到主窗体和frmOverlay中,您可以创建一个递归函数来最小化所有子窗体

public void MinimizeAllChildForms(Form parent)
{
    foreach(Form f in parent.OwnedForms)
    {
        f.WindowState = FormWindowState.Minimized;
        MinimizeAllChildForms(f);
    }
}
然后在主窗体中,从
Resize
事件调用它

void MainForm_Resize(object sender, EventArgs e)
{
    if (WindowState == FormWindowState.Minimized)
       MinimizeAllChildForms(this);
}
我假设您希望
frmPleaseWait
frmOverlay
最小化时也最小化。如果您没有,那么您可以简单地将它的父窗体设置为主窗体,这样当主窗体执行此操作时,它会自动最小化

frmPleaseWait = new frmPleaseWait(_text); 
frmPleaseWait.Show(MainForm);

这比+1更好
frmPleaseWait = new frmPleaseWait(_text); 
frmPleaseWait.Show(MainForm);