还原主窗口时,以前最大化的子窗口不再最大化

时间:2019-01-16 10:42:45

标签: c# winforms

假设您有一个Windows Forms应用程序,该应用程序的主窗口带有子窗口。

如果最大化主窗口和子窗口,然后最小化主窗口,则子窗口也会自动最小化。这是正确和预期的。

如果您随后还原主窗口(通过在任务栏中单击其图标),则主窗口将正确还原为最大化,而辅助窗口将还原为非最大化。

有什么办法可以解决这个问题? (这似乎是WinForms的错误,但也许是设计使然...)

要复制(需要两个监视器):

  1. 创建一个新的默认Windows Forms应用程序。这将创建一个名为Form1的主表单。
  2. 选择Project | Add Windows Form...,然后单击Add,添加一个名为Form2的新表单。
  3. Form1构造函数更改为如下形式:

    public Form1()
    {
        InitializeComponent();
        new Form2().Show(this); // New line of code.
    }
    
  4. 运行应用程序。

  5. 将Form1移至一个监视器,并将Form2移至另一监视器。

  6. 通过单击标题栏上的最大化图标,
  7. 最大化Form1和Form2。

  8. 最小化Form1,方法是单击其标题栏上的最小化图标。观察到Form2也被最小化了。

  9. 通过单击任务栏上的图标,
  10. 还原Form1。

实际结果:

Form1恢复到其最大化状态。 Form2不会还原到其最大化状态。

预期结果:

两种形式都恢复到最大化状态。

1 个答案:

答案 0 :(得分:0)

进一步搜索后,我找不到任何记录的解决方案,所以我提出了自己的解决方案。如果将以下方法和字段添加到子窗体的实现中,它将解决此问题:

protected override void OnVisibleChanged(EventArgs e)
{
    base.OnVisibleChanged(e);

    if (!Visible)
    {
        _lastState = WindowState;
    }
    else
    {
        if (_lastState == FormWindowState.Maximized)
            WindowState = FormWindowState.Maximized;
    }
}

FormWindowState _lastState = FormWindowState.Normal;

但是,如果有人有更好的修复程序,我将非常有兴趣听到它。