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

Я использую визуальную студию 2010, чтобы сделать свой графический интерфейс С#.

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

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

Вот пример:

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

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


person athgap    schedule 30.11.2010    source источник
comment
Как увеличить окно?? вручную или программно?   -  person Shoban    schedule 30.11.2010
comment
Короткая, но полная программа, демонстрирующая проблему, действительно помогла бы в этом.   -  person Jon Skeet    schedule 30.11.2010
comment
Вы зарегистрировали какое-либо событие формы?   -  person Ken D    schedule 30.11.2010


Ответы (1)


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

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

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

person bitxwise    schedule 30.11.2010