Максимизация ребенка МДИ в ограниченной области
Вопрос
У меня есть форма, которая является mdicontainer и имеет полосу меню в верхней части. Я добавляю дочернюю форму к своему контейнеру mdi, и когда я максимизирую дочернюю форму, она максимизирует над менструацией Я хочу знать, как ограничить ребенка, чтобы максимизировать ниже менструации Любая помощь будет оценена.
Решение
Ваша дочерняя форма максимизируется так, как предполагается, что дочерние формы максимизируются в MDI. На самом деле он не охватывает полосу меню родительской формы - он фактически объединяет собственную полосу меню с полосой родительской формы.
Чтобы дочерняя форма занимала только доступную дочернюю область в родительском элементе MDI (и не объединяла его меню с родительским меню), добавьте что-то вроде этого кода в событие Resize дочерней формы:
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
this.Size = this.MdiParent.ClientSize;
this.Location = new Point(0, 0);
}
, который не позволит развернуть дочернее окно.
Я говорю "что-то вроде этого кода" потому что этот фрагмент не работает точно Свойство ClientSize
родительской формы дает общий размер формы, в то время как вы хотите использовать размер только клиентской области MDI. Я не знаю, как это получить, и, видимо, это не супер-просто. Смотрите этот вопрос:
Другие советы
Вы можете установить свойство MaximumSize так, чтобы оно не заполняло весь контейнер.
Я знаю, что это старый вопрос, но я столкнулся с этим на старом проекте, над которым я работаю, так что вот ответ для любого, кто видел это. Установка Dock в DockStyle.Fill даст вам поведение, которое вы хотите. Р>
Просто имейте в виду, что окно будет выглядеть / выглядеть странно, если вы попытаетесь изменить положение окна или изменить его размер, когда у него есть этот DockStyle.
Для этого я подписался на событие resize окна MDI-клиента и, если окно было только что развернуто, я установил для его DockStyle значение Fill, для FormBorderStlye было установлено значение FixedDialog (для предотвращения изменения размера) и установлено состояние окна в нормальном состоянии. для предотвращения максимизации.
Чтобы запретить пользователю перемещать окно, пока оно находится в этом "развернутом состоянии" Я просто переопределил метод WndProc и обработал его при перемещении окна (SC_MOVE) и поместил возврат, чтобы предотвратить действие.