Дочерняя форма Windows MDI не открывается в состоянии WIndowMaximized

Я установил форму как дочернюю для формы MDI, для которой WindowState задано значение Maximized.

Когда я открываю эту форму из контейнера MDI, она не открывается в развернутом состоянии. Почему это происходит и как я могу сделать это максимально открытым?

Вот как я показываю дочернюю форму из контейнера mdi.

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.WindowState = FormWindowState.Maximized;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
}

person Sandeep Pathak    schedule 09.09.2010    source источник
comment
Можете ли вы поделиться кодом, открывающим дочернее окно?   -  person Fredrik Mörk    schedule 09.09.2010
comment
Вы установили yourform.MdiParent = frameform?   -  person Dmitry Karpezo    schedule 09.09.2010
comment
Если вы установили для параметра WindowState значение «Максимум», оно должно открываться только в развернутом режиме.   -  person Vijay Balkawade    schedule 09.09.2010
comment
Насколько я понимаю, этот код верен. Дошло до создания проекта оболочки только с формой контейнера MDI и одним дочерним элементом. Есть ли возможность его изменения вне этой функции, возможно, через свойство MDIChildren родительской формы?   -  person StyxRiver    schedule 09.09.2010
comment
Почтовый индекс, который действительно воспроизводит проблему.   -  person Hans Passant    schedule 09.09.2010


Ответы (13)


Нашел наилучший способ решить эту проблему .. Просто используйте две строчки:

frm r = new frm();
r.MdiParent = this;
r.Show();
r.WindowState = FormWindowState.Minimized;
r.WindowState = FormWindowState.Maximized;

Как оказывается, желаемый результат получается, если сначала свернуть форму, а потом развернуть!

person Somu    schedule 17.03.2013
comment
То, что вы написали, работает, потому что WindowState изменяется ПОСЛЕ отображения формы, а не из-за двух изменений WindowState. - person Mickael Bergeron Néron; 14.06.2014
comment
Микаэль, есть небольшая загвоздка; если вы уже установили для WindowState значение Maximized до того, как форма будет показана, максимизация его снова не поможет, минимизация и максимизация позаботятся об этом - person Mikko Lassila; 18.02.2016

В Framework действительно есть ошибка. Кажется, что Framework сбивается с толку, если вы устанавливаете WindowState на Maximized из графического интерфейса. Вы получаете странное состояние где-то между максимальным и размером по умолчанию.

Изображение смешанного состояния MdiChild

Если WindowState установлен таким образом, попытки исправить это в коде игнорируются. Приведенный ниже код создал изображение выше.

private void ShowNewForm(object sender, EventArgs e)
    {
        Form1 childForm = new Form1();
        childForm.MdiParent = this;
        childForm.Text = "Window " + childFormNumber++;
        childForm.Show();
        childForm.WindowState = FormWindowState.Maximized;
    }

Последующие вызовы ShowNewForm () будут отображаться правильно, но первый дочерний элемент всегда будет демонстрировать такое поведение.

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

Мои версии:
C # Express 10.0.40219.1 SP1
.NET 4.0.30319 SP1

person ILeftItAtHome    schedule 05.07.2013

Я обнаружил, что если другая видимая форма вызывает второй MIDChild и устанавливает текст, то MDIChild теряет отслеживание своего WindowState.

Попробуйте прокомментировать

childForm.Text = "Window " + childFormNumber++;

и посмотрите, решит ли это вашу проблему. Мне кажется, это ошибка фреймворка.

person Paul Kimmel    schedule 04.09.2011

Форма должна быть сначала показана, а затем развернута!

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
    childForm.WindowState = FormWindowState.Maximized;
}
person Mickael Bergeron Néron    schedule 14.06.2014

Выберите форму вашего ребенка. Нажмите F4 и установите WindowState в нормальное состояние.

если вы хотите максимизировать ребенка, вы должны установить свойство формы в нормальное состояние

и напишите такой код:

FormChild childForm = new FormChild ();
childForm.MdiParent = this;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
person Sandip Ramani    schedule 21.12.2014

Вы можете попробовать следующее:

  form1 obj = new form1 ();

  obj.MdiParent = MDIGracular.ActiveForm;

  obj.StartPosition = FormStartPosition.CenterParent;

  obj.WindowState = FormWindowState.Minimized;

  obj.Dock = DockStyle.Fill;

  obj.Show();

  obj.WindowState = FormWindowState.Maximized;
person sarvjeet    schedule 14.10.2016

FormChild childForm = new FormChild ();
childForm.MdiParent = this;

childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childform.BringToFront();
childForm.WindowState = FormWindowState.Maximized;

надеюсь, это поможет

person amper Kean    schedule 18.02.2013

Это просто.

В дочерней форме напишите код события загрузки:

this.WindowState = FormWindowState.Maximized;
person Hassan Raza    schedule 06.01.2014

Игнорировать установку WindowState в режиме разработки (Свойства -> WindowsState -> Развернуто)

Затем после показа формы:

childForm.WindowState=FormWindowState.Maximized;

Мои версии:

  • Visual Studio 2010
  • .NET 3.5
person activher    schedule 13.08.2014

У меня была та же проблема, и все, что я нашел, не помогло. У меня есть родительское (главное) окно и несколько дочерних окон. Когда дочернее окно закрывается, оно вместо этого скрывается и активируется при повторном открытии.

Что бы я ни пробовал, когда скрытое дочернее окно снова активируется, оно находится в полуразвернутом состоянии, когда никакое другое дочернее окно не открыто. Если для некогда скрытого и активированного окна установлено нормальное состояние, его полоса отображается за родительским окном.

Теперь я узнал, что это происходит только тогда, когда дочернее окно скрыто в развернутом состоянии. Поэтому я установил WindowState на Normal в событии FormClosing до того, как окно будет скрыто и все будет работать должным образом.

person Michael Müller    schedule 29.07.2015

В свойствах childForm установите для свойства Windows State значение Normal. Затем в методе childForm Load добавьте следующую строку:

this.WindowState = FormWindowState.Maximized;
person George    schedule 09.11.2015

Думаю, теперь я знаю, зачем тебе устанавливать

childForm.WindowState=FormWindowState.Maximized;

после

childForm.Show();

Когда вы устанавливаете форму как развернутую, она использует все пространство, которое она получает, поэтому нормальная форма разворачивается на весь экран, а дочерняя форма MDI разворачивается до указанного пространства внутри родительской формы MDI. Но это полезное пространство устанавливается командой "show". Таким образом, если вы установите максимальное состояние окна дочерней формы перед командой "show", она просто не знает, насколько большим она может стать, и поэтому отображается с размером окна "нормальный", но в остальном это развернутая форма. .

Единственный способ заставить дочернюю форму MDI всегда открываться в развернутом виде без излишнего мерцания - это установить для нее другое состояние окна перед командой «show» и развернуть ее после ее отображения.

person Michael Müller    schedule 13.01.2016

Я наконец нашел решение, и оно работает для меня правильно. Это проблема Framework, когда мы имеем дело с формой MDI, и мы не можем решить ее, только изменив свойство WindowState на максимальное. Нам нужно написать ниже код:

Код: Форма Form1 = новая форма Form1.Dock = DockStyle.Fill;

Это свойство Dock развернет дочерние формы в MDIForm и убедитесь, что свойство WindowState всех дочерних форм должно иметь значение Normal.

person Monika Singh    schedule 19.07.2020