C# Как мне оставить развернутое окно как есть?

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

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

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

Вот пример:

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

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

1 ответ

Предполагая, что вы используете WinForms, вы можете либо реализовать общий диспетчер FormWindowState, либо использовать контейнер Multiple 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.

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

Другие вопросы по тегам