【问题标题】:C# How do I leave the maximized window as it is?C#如何保持最大化窗口不变?
【发布时间】:2026-01-26 04:10:01
【问题描述】:

我正在使用 Visual Studio 2010 来制作我的 C# GUI。

我目前面临的问题是最大化窗口后,它会停留在那里,但是当我转到其他表单时,窗口会恢复到原来的大小。

单击最大化按钮后,如何让所有表单一直保持最大化窗口?

这是一个例子:

  1. 用户最大化表单 A
  2. A 型最大化
  3. 用户转到表单 B
  4. 表单 B 恢复到原始大小,而不是最大化的窗口

我想要的是当用户最大化表单时,它会一直保持这种状态,直到程序关闭或调整大小。

【问题讨论】:

  • 如何最大化窗口?手动还是编程?
  • 一个简短但完整的程序来演示这个问题真的会有所帮助..
  • 您注册了任何表单事件吗?

标签: c# user-interface maximize-window


【解决方案1】:

假设您使用的是 WinForms,您可以实现共享的 FormWindowState 管理器或使用多文档界面 (MDI) 容器。

共享窗体窗口状态

您可以使用负责传播表单的 FormWindowState 更改的类来注册每个表单。

public class FormWindowStateManager {
    List<Form> _Forms;

    ...

    public void Register(Form form) {
        if(!_Forms.Contains(form)) {
            _Forms.Add(form);
            form.Resize += new EventHandler(Form_Resize);
        }
    }

    public void Unregister(Form form) {
        if(_Forms.Contains(form)) {
            _Forms.Remove(form);
            form.Resize -= new EventHandler(Form_Resize);
        }
    }

    private void Form_Resize(object sender, EventArgs e) {
        Form form = sender as Form;
        if(form != null) {
            if(form.FormWindowState == FormWindowState.Maximized || form.FormWindowState == FormWindowState.Normal) {
                PropagateWindowState(form.FormWindowState);
            }
        }
    }

    private void PropagateWindowState(FormWindowState state) {
        foreach(Form form in _Forms) {
            if(form.FormWindowState != state) {
                form.FormWindowState = state;
            }
        }
    } 
}

MDI 容器

MdiParentForm.cs

IsMdiContainer = true;

MdiChildForm.cs

MdiParent = myParentForm; // instance of MdiParentForm

您可以使用窗体的 MdiChildren 属性遍历窗体的 MDI 子窗体,这样当 MDI 子窗口更改其 FormWindowState 时,MDI 父窗体可以将更改应用于其每个子窗体,类似于共享的 FormWindowState接近。

这些想法只是我的想法,但也许它们会让你朝着正确的方向前进。

【讨论】:

    最近更新 更多