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

时间:2013-09-14 18:26:52

标签: c# winforms

我有一个显示叠加形式的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窗体,是否有一种方法可以在主窗体最小化时最小化所有窗体?

2 个答案:

答案 0 :(得分:2)

您可以创建一个递归函数,以最小化所有子表单。

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

您可以为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;
    }
}

将该代码添加到您的mainform和frmOverlay

相关问题