Дочерняя форма Windows MDI не открывается в состоянии WIndowMaximized - PullRequest
0 голосов
/ 09 сентября 2010

Я установил форму как дочернюю для формы 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();
}

Ответы [ 12 ]

9 голосов
/ 17 марта 2013

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

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

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

3 голосов
/ 05 июля 2013

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

Image of mixed MdiChild state

При установленном 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

3 голосов
/ 04 сентября 2011

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

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

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

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

2 голосов
/ 21 декабря 2014

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

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

и написать код, например:

FormChild childForm = new FormChild ();
childForm.MdiParent = this;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
2 голосов
/ 14 июня 2014

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

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
    childForm.WindowState = FormWindowState.Maximized;
}
1 голос
/ 14 октября 2016

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

  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;
0 голосов
/ 13 января 2016

Думаю, теперь я знаю, почему вы должны установить

childForm.WindowState=FormWindowState.Maximized;

после

childForm.Show();

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

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

0 голосов
/ 09 ноября 2015

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

this.WindowState = FormWindowState.Maximized;
0 голосов
/ 29 июля 2015

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

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

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

0 голосов
/ 13 августа 2014

Игнорировать, чтобы установить WindowState в режиме конструктора (Свойства -> WindowsState -> Развернутый) Затем после показа формы:

childForm.WindowState=FormWindowState.Maximized;

Мои версии:

  • Visual Studio 2010
  • .NET 3.5
...