Советы по настройке состояния окна Windows Forms
У меня есть приложение Windows Forms, которое открывает дочерние формы MDI. Когда я выбираю эти формы, мне нужно установить или визуализировать его окно в Maximized. Проблема в том, что когда я перемещаюсь между открытыми формами, он возвращается к нормальному состоянию окна, а когда я снова устанавливаю состояние окна на максимизированный, он показывает переход из нормального в максимизированное состояние, и это выглядит не очень хорошо.
Как создать приложение Windows с родительской формой MDI, которая открывает множество дочерних элементов MDI в развернутом состоянии окна?
4 ответа
Вот ответ, основанный на использовании MDI "Парадигма родительской формы и дочерней формы", со следующими допущениями:
у вас есть элемент управления MenuStrip 'Dock = 'Top на вашем MDIParentForm, и вы реализовали автоматический обработчик меню MDI &Window, как описано в: Как: создать список окон MDI с помощью MenuStrip
вы создаете новые дочерние формы, которые:
а. не имеют MaximizeBox, MinimizeBox и т. д., но могут иметь ControlBox (для их закрытия)
б. эти дочерние формы могут быть изменяемого размера или нет: мы не будем рассматривать последствия этого здесь.
Вы хотите, чтобы эти MDIChildForms отображались развернутыми в MDIParent Form, но не чтобы затемнять меню MDIParentForm.
Хорошо, если у вас есть полностью разработанные все ваши дочерние формы,"ожидающие своего часа": мы могли бы увидеть такой код в вашем коде MDIParentForm:
// create instances of your child forms
Form2 f2 = new Form2();
Form3 f3 = new Form3();
Form4 f4 = new Form4();
Form5 f5 = new Form5();
private void MDIParentForm1_Load(object sender, EventArgs e)
{
f2.Text = "subForm1";
f3.Text = "subForm2";
f4.Text = "subForm3";
f5.Text = "subForm4";
f2.MdiParent = this;
f3.MdiParent = this;
f4.MdiParent = this;
f5.MdiParent = this;
f2.Dock = DockStyle.Fill;
f3.Dock = DockStyle.Fill;
f4.Dock = DockStyle.Fill;
f5.Dock = DockStyle.Fill;
f2.Show();
f3.Show();
f4.Show();
f5.Show();
}
На этом этапе стиль док-станции "Заливка", примененный к дочерним формам, сделает их полноэкранными и не позволит им скрыть меню MDIParentForm: и меню позволит вам автоматически выбрать, какой из них является передним.
Теперь, если вы хотите заняться чем-то более интересным: например, измените размеры дочерних форм, расположите их мозаично, каскадно. Вам нужно будет изменить свойство Dock этих дочерних окон: и тогда вы сможете использовать встроенные средства организации окна парадигмы MDI, как описано здесь: Практическое руководство. Организация дочерних форм MDI
И если вы хотите создать несколько экземпляров одного типа предопределенной дочерней формы: как создавать дочерние формы MDI... посмотрите пример использования пункта "Новый пункт меню: может оказаться полезным".
Если вы хотите, чтобы состояние окна всегда было максимальным, я бы порекомендовал отказаться от формы MDI. В этом случае TabControl может работать лучше.
Формы MDI имеют довольно много проблем с юзабилити, поэтому они больше не используются и обычно заменяются другими элементами управления / опциями.
После прочтения Ридс ответьте и особенно ваш комментарий:
проблема с tabcontrol, у меня есть много элементов управления, используемых для дочерней формы
Может быть, это поможет: не помещайте свои средства управления в Winform
, Вместо этого заключите их в UserControl
(возможно, это уже работает путем изменения вашего наследования от Form
в UserControl
).
Теперь поместите каждый UserControl на свою собственную TabPage и установите для свойства Dock значение Fill. Теперь вы можете изменять каждый пользовательский элемент управления самостоятельно, без какого-либо вмешательства в другой элемент управления на другой вкладке (если вы не встроили ни одно соединение).
Если вы собираетесь отказаться от MDI, вы можете взглянуть на стыковочные платформы, такие как WeifenLuo или DigitalRune. Это бесплатно, для других вариантов вы можете посмотреть здесь: http://windowsclient.net/downloads/folders/controlgallery/tags/Windows+Forms+Docking+Windows/default.aspx
РЕДАКТИРОВАТЬ:
Если я хорошо помню, DigitalRune разрешает использование оконных форм в качестве контейнеров для закрепленного контента, поэтому процесс миграции будет меньше.