簡體   English   中英

C#如何使最大化窗口保持原樣?

[英]C# How do I leave the maximized window as it is?

我正在使用Visual Studio 2010來執行C#GUI。

我目前面臨的問題是最大化一個窗口后,它會留在那里,但是當我轉到其他窗體時,該窗口將恢復到其原始大小。

單擊最大化按鈕后,如何在所有表單中完全離開最大化窗口?

這里是一個例子:

  1. 用戶最大化表格A
  2. 表格A已最大化
  3. 用戶進入表格B
  4. 表格B返回原始大小,而不是最大化的窗口

我想要的是當用戶最大化表單時,它會保持這種狀態,直到關閉程序或調整程序大小為止。

假設您正在使用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子MdiChildren ,以便在MDI子窗口上更改其FormWindowState ,MDI父窗體可以將更改應用於其每個子級,類似於共享FormWindowState方法。

這些想法只是我的腦海,但也許它們會帶您正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM