C# WinForms 在主窗体最小化时最小化 form.Show()

标签 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 窗体,有什么方法可以在主窗体最小化时全部最小化吗?

最佳答案

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

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

关于C# WinForms 在主窗体最小化时最小化 form.Show(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18805027/

相关文章:

c# - 当对象设置为 null 时,针对 CLR 的编译器能否生成 Dispose 方法调用?

c# - 使用 Fody 的 Mono 支持将 dll 嵌入到 exe 中

c# - MVC 中的 post 问题

c# - 当我的代码依赖于 redis 时,我应该如何编写测试

mysql - 多个终端从列表中选择一个号码

c# - 如何获取 Form 程序的参数?

c# - 画线时 Pen.Alignment 不起作用

.net - 多进程 C# 应用程序(如 Google Chrome)的示例

c# - 使用 .Net Reactor 时未知的自定义元数据项类型 7

c# - 如何识别基于单个左连接的 sql 命令的左连接过多