【问题标题】:C# WinForms minimize frm.Show() when main form is minimized当主窗体最小化时,C# WinForms 最小化 frm.Show()
【发布时间】:2013-09-14 18:26:51
【问题描述】:

我有一个显示覆盖表单的 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 窗体,有没有什么方法可以在主窗体最小化时全部最小化?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

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

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

    我假设您希望frmPleaseWaitfrmOverlay 最小化时也最小化。如果你不这样做,那么你可以简单地将其父窗体设置为主窗体,以便它在主窗体出现时自动最小化。

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

    【讨论】:

    • 那更好+1
    【解决方案2】:

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

    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

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多