winforms — usercontrol с заполнением dockstyle неправильного размера при загрузке формы

#vb.net #winforms #dock

#vb.net #winforms #док

Вопрос:

Моя основная форма имеет две панели, закрепленную слева и закрепленную справа. На правой боковой панели есть две дочерние панели с настройками верхнего и нижнего док-станций. Пользовательский элемент управления добавлен на правую боковую верхнюю панель.

В моем usercontrol есть панель и ярлык. Панель закреплена со всех 4 сторон, метка закреплена на всех, кроме нижней. Во время выполнения я создаю этот usercontrol и устанавливаю для него значение dockstyle = fill, а затем добавляю его на свою верхнюю правую панель.

Поскольку для всего установлено значение «заполнить», я ожидаю, что когда я добавлю свой usercontrol на панель, он примет соответствующую ширину и высоту и передаст эту информацию дочерним элементам управления (меткам) внутри моего usercontrol.

Моя проблема в том, что такого увеличения размера не происходит, когда я создаю свои объекты во время события загрузки в моем usercontrol. Даже при том, что initializecomponent запущен для usercontrol, панель внутри него (закрепленные 4 угла) не приняла значения x / y доступного пространства. В результате мой usercontrol отображает около 50% от желаемой ширины.

Допустим, что вместо создания объектов во время загрузки usercontrol я запускаю таймер, и таймер вызывает мою процедуру создания, когда она вызывает событие tick. Когда я делаю подобные вещи, мои объекты создаются с полной шириной / высотой, которые я ожидаю. Единственная проблема здесь в том, что это вызывает задержку в моем интерфейсе.

Кто-нибудь может помочь объяснить это поведение? Моя основная форма вызывает процедуру «load gui», которая создает пользовательские элементы управления, устанавливает размеры панели, а затем добавляет пользовательские элементы управления к этим панелям. Этот конкретный пользовательский элемент управления загружается последним в панели из этой процедуры графического интерфейса загрузки, поэтому не имеет смысла, что ширина / высота родительской панели еще не были известны. Это одно из моих первых приложений, в котором я намеренно пытаюсь использовать dockstyle = fill, чтобы обеспечить согласованность между различными размерами основной формы без написания всех дополнительных обработчиков кода size_changed. Я уверен, что с этим легко справиться, как только я узнаю, в чем проблема.

Спасибо за любую предоставленную помощь!

Комментарии:

1. Вы пробовали добавить пользовательский элемент управления на панель, а затем установить DockStyle для заполнения? Кроме того, убедитесь, что для usercontrol и панели AutoSize установлено значение false.

2. Я опробовал это во время разработки. Дизайнер показывает такое же поведение. Проверил параметры автоматического изменения размера, и все они оказались ложными. Вот странная вещь, когда я запускаю ее с добавлением «времени разработки» control…it отображается в полном размере. Хотел бы я знать, что происходит, когда я добавляю во время выполнения, но пока я могу разобраться. Спасибо, Стюарт, за предложения.

Ответ №1:

оказалось, что это проблема с заполнением родительского usercontrol. Мне также пришлось оставить немного места для маневра, чтобы убедиться, что элементы управления не переполняют панель, поэтому я сделал parent.width — 15, и это вместе с заполнением заставило все работать намного лучше.