猿问

恢复主窗口时,以前最大化的子窗口不再最大化

假设您有一个 Windows 窗体应用程序,它有一个主窗口和一个子窗口。

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

如果您随后恢复主窗口(通过单击任务栏中的图标),主窗口会正确恢复为最大化,但辅助窗口会恢复为非最大化。

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

重现(需要两台显示器):

  1. 创建一个新的默认 Windows 窗体应用程序。这将创建一个名为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. 通过单击标题栏上的最大化图标来最大化 Form1 和 Form2。

  7. 通过单击其标题栏上的最小化图标来最小化 Form1。观察 Form2 也变得最小化。

  8. 通过单击任务栏上的图标来恢复 Form1。

实际结果:

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

预期结果:

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


茅侃侃
浏览 98回答 1
1回答

四季花海

经过进一步搜索,我找不到任何记录在案的解决方案,所以我想出了自己的解决方案。如果您将以下方法和字段添加到子表单的实现中,它可以解决问题: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;但是,如果有人有更好的解决方案,我会非常有兴趣听到它。
随时随地看视频慕课网APP
我要回答