Максимизация ребенка МДИ в ограниченной области - PullRequest
3 голосов
/ 22 октября 2009

У меня есть форма, которая является mdicontainer и имеет полосу меню в верхней части. Я добавляю дочернюю форму к своему контейнеру mdi, и когда я максимизирую дочернюю форму, она максимизируется по менструации. Я хочу знать, как ограничить ребенка, чтобы максимизировать ниже менструации. Любая помощь будет оценена.

Ответы [ 3 ]

2 голосов
/ 22 октября 2009

Ваша дочерняя форма максимизируется так, как предполагается, что дочерние формы максимизируются в 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. Я не знаю, как это получить, и, видимо, это не супер-просто. Смотрите этот вопрос:

Размер / расположение клиентской зоны Winforms MDI

0 голосов
/ 16 июля 2015

Я знаю, что это старый вопрос, но я столкнулся с этим на старом проекте, над которым я работаю, так что вот ответ для любого, кто видел это. Установка Dock в DockStyle.Fill даст вам поведение, которое вы хотите.

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

Для этого я подписался на событие resize окна MDI-клиента и, если окно было только что развернуто, я установил для его DockStyle значение Fill, для FormBorderStlye было установлено значение FixedDialog (для предотвращения изменения размера) и установлено состояние окна на нормальное для предотвращения максимизации.

Чтобы пользователь не мог перемещать окно, пока оно находится в этом «развернутом состоянии», я просто переопределил метод WndProc и обработал его, когда окно было перемещено (SC_MOVE), и поместил возврат, чтобы не дать действию вступить в силу.

0 голосов
/ 22 октября 2009

Вы можете установить свойство MaximumSize, чтобы оно не заполняло весь контейнер.

...