C # Как мне оставить развернутое окно как есть? - PullRequest
0 голосов
/ 30 ноября 2010

Я использую Visual Studio 2010, чтобы сделать мой C # GUI.

Текущая проблема, с которой я сталкиваюсь, заключается в том, что после максимизации окна оно остается там, но когда я перехожу к другим формам, окно возвращается к своему первоначальному размеру.

Как оставить максимизированное окно полностью для всех форм после нажатия кнопки максимизации?

Вот пример:

  1. Пользователь максимизирует формуA
  2. Форма A развернута
  3. Пользователь переходит на форму B
  4. Форма B возвращается к исходному размеру вместо развернутого окна

Что яКогда пользователь максимизирует форму, он остается таким до тех пор, пока программа не закроется или не изменит ее размер.

1 Ответ

1 голос
/ 30 ноября 2010

Предполагая, что вы используете WinForms, вы можете либо реализовать общий диспетчер FormWindowState, либо использовать контейнер Multi-Document Interface (MDI).

Shared 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

Вы можете перебирать дочерние элементы MDI формы, используя свойство MdiChildren формы, чтобы при изменении дочернего окна MDI FormWindowState родительская форма MDI могла применить изменение к каждому дочернему элементу, подобно общему FormWindowState подход.

Эти идеи не в моей голове, но, возможно, они приведут вас в правильном направлении.

...