Максимизация ребенка МДИ в ограниченной области

StackOverflow https://stackoverflow.com/questions/1604024

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top