2016-08-19 4 views
0

У меня есть приложение, которое работает следующим образом: существует основная форма, которая является открытыми дочерними формами для регистрации, поиска и т. Д. Намерение всегда состоит в открытых дочерних формах в центре основной формы, независимо от его размера. Для этого я использую следующий код в виде сына OnCreate:Централизовать дочернюю форму не работает

formChild->Left=(MainForm->pnlMain->Width/2); 
formChild->Top=(MainForm->pnlMain->Height/2)-(formChild->Height/2); 

До сих пор все в порядке, форма центрируется правильно, как показано на следующем рисунке:

enter image description here

Когда дочерняя форма закрывается, основная форма восстанавливается и открывается форма сына: возникает следующая проблема: enter image description here

Детальная форма генерируется в том месте, где была создана первая t время (с максимальным окном).

+0

Просьба указать [mcve], который демонстрирует проблему. –

+0

Вы создаете дочернюю форму каждый раз, когда приложение хочет отображать ее или используется один и тот же экземпляр, который используется снова и снова? Попробуйте поместить свой код в обработчик события OnShow дочерней формы. –

+0

Я уже пробовал с событием OnShow. Поведение такое же. –

ответ

5

Правильный способ справиться с этим - установить свойство Position дочерней формы на poMainFormCenter.

Это будет гарантировать, что когда дочерняя форма будет создана и показана впервые, она будет сосредоточена на MainForm.

ПРИМЕЧАНИЕ. Позиция детской формы не будет обновляться, если вы просто спрячете ее, а затем снова покажете ее. Если вам нужна детская форма, чтобы всегда быть центрированной каждый раз, когда она показана, вы должны уничтожить ее, когда она закрыта, а затем повторно создать ее, прежде чем показывать ее.

+0

Я использую форму delete в событии onClose моего дочернего элемента формы, но отображается ошибка доступа к нарушениям. Каков правильный способ удаления формы во время выполнения? –

Смежные вопросы