为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
茅侃侃 2022-07-23 08:59:19
假设您有一个 Windows 窗体应用程序,它有一个主窗口和一个子窗口。如果您最大化主窗口和子窗口,然后最小化主窗口,子窗口也会自动最小化。这是正确和预期的。如果您随后恢复主窗口(通过单击任务栏中的图标),主窗口会正确恢复为最大化,但辅助窗口会恢复为非最大化。有没有什么办法解决这一问题?(这似乎是一个 WinForms 错误,但也许是设计使然……)重现(需要两台显示器):创建一个新的默认 Windows 窗体应用程序。这将创建一个名为Form1.选择Project | Add Windows Form...并单击Add以添加一个名为 的新表单Form2。将构造函数更改Form1为如下所示:public Form1(){     InitializeComponent();     new Form2().Show(this); // New line of code.}运行应用程序。将 Form1 移动到一个监视器,将 Form2 移动到另一个监视器。通过单击标题栏上的最大化图标来最大化 Form1 和 Form2。通过单击其标题栏上的最小化图标来最小化 Form1。观察 Form2 也变得最小化。通过单击任务栏上的图标来恢复 Form1。实际结果:Form1 恢复到其最大化状态。Form2 不会恢复到其最大化状态。预期结果:两种形式都恢复到它们的最大化状态。
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

经过进一步搜索,我找不到任何记录在案的解决方案,所以我想出了自己的解决方案。如果您将以下方法和字段添加到子表单的实现中,它可以解决问题:


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;

但是,如果有人有更好的解决方案,我会非常有兴趣听到它。


查看完整回答
反对 回复 2022-07-23
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信