Изменение размера в событии SizeChanged не вступает в силу - PullRequest
0 голосов
/ 24 февраля 2012

Технология: C #, Winforms

Фон: У меня есть следующая структура контейнера (Форма, содержащая панель, которая содержит 2 панели)

Form F1
 |-> Panel P1 (DockStyle.Fill)
        |-> Panel P2 (DockStyle.Top)
        |-> Panel P3 (DockStyle.Fill)

Я регистрируюсь на событие P3.SizeChange и в случае, если я меняю P2.Size

Проблема: Я ожидаю, что все изменения размера будут корректно отражены в графическом интерфейсе пользователя

Наблюдаемый результат: Каждый раз, когда P2.Size изменяется на основе ранее установленного размера

Что я пробовал:

  1. Я пытался вызвать PerformLayout и Invalidate, но все же графический интерфейс не правильно отражает изменения.
  2. Если я подключаю ту же функцию к F1.SizeChange, все работает нормально
  3. ВместоПри изменении размера, если я изменяю и возвращаю DockStyle (P3.Dock = DockStyle.None; P3.Dock = DockStyle.Fill), он портит графический интерфейс

Похоже, в библиотеке форм Iне может изменить свойство макета (размер, док и т. д.) из одноуровневого элемента управленияСобытие, связанное с макетом rol (SizeChanged)

Кто-нибудь еще сталкивался с этой проблемой и имеет обходной путь?Я использую .NET 4.0 (я думаю) из Visual Studio Express 2010

Входные данные будут высоко оценены

Ответы [ 2 ]

0 голосов
/ 24 февраля 2012

Я не знаю, чего вы пытаетесь достичь;однако, если вы пытаетесь распределить доступное пространство между P2 и P3, SplitContainer может помочь решить проблему.

0 голосов
/ 24 февраля 2012

Попробуйте изменить размер на следующей итерации цикла сообщений (что произойдет после окончания этапа макета), выполнив это в BeginInvoke().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...