Максимизация ребенка МДИ в ограниченной области
У меня есть форма, которая является mdicontainer и имеет полосу меню в верхней части. Я добавляю дочернюю форму к своему контейнеру mdi, и когда я максимизирую дочернюю форму, она максимизируется по менструации. Я хочу знать, как ограничить ребенка, чтобы максимизировать ниже менструации. Любая помощь будет оценена.
3 ответа
Ваша дочерняя форма максимизируется так, как предполагается, что дочерние формы максимизируются в 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) и поместил возврат, чтобы не дать действию вступить в силу.