C# WinForms 最小化 frm.当主窗体最小化时显示()



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

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

这个frmOverlay表单同时显示它在中间显示另一个表单(消息表单):

private void frmOverlay_Load(object sender, EventArgs e)
{   
    frmPleaseWait = new frmPleaseWait(_text); 
    frmPleaseWait.Show(this);
}

当我最小化主窗体时,我仍然可以看到frmPleaseWait窗体,有没有办法在最小化主窗体时最小化所有窗体?

您可以创建一个递归函数,该函数将最小化所有子窗体。

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);

您可以为 resize 事件创建一个事件处理程序,并在其中最小化表单:

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

最新更新