C#如何保持最大化窗口不变?

时间:2010-11-30 07:25:24

标签: c# user-interface maximize-window

我正在使用visual studio 2010来完成我的C#GUI。

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

单击最大化按钮后,如何为所有表单保留最大化窗口?

以下是一个例子:

  1. 用户最大化表格A
  2. 表格A最大化
  3. 用户转到表格B
  4. 表单B返回原始大小而不是最大化窗口
  5. 我想要的是当用户最大化表单时,它会保持这种状态,直到程序关闭或调整大小。

1 个答案:

答案 0 :(得分:1)

假设您正在使用WinForms,您可以实现共享的FormWindowState管理器或使用多文档接口(MDI)容器。

共享FormWindowState

您可以使用负责在表单'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方法。

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