Подтвердить что ты не робот

С#: привязанная панель не будет правильно изменяться

У меня странная проблема в отношении автоматического определения размера панели в пользовательском элементе управления. Эта панель закреплена на всех четырех сторонах пользовательского элемента управления. Но привязка не всегда работает так, как должна:

Если пользовательский элемент управления изменен, изменив размер формы, правый и нижний якоря не работают. Но если элемент управления изменяется с помощью сплиттера, который находится в форме, он работает правильно. Все остальные элементы управления, на которые также влияет изменение размера, работают правильно, эта панель не будет работать.

Я не вижу разницы между изменением размера сплиттера и формой.

Настройка размера вручную в OnResize для UserControl работает только в том случае, если изменение размера производится путем перемещения разделителя. Если изменение размера происходит путем изменения размера формы, высота и ширина панели не будут изменяться на новые значения.

Изменить: сделать это более понятным: пользовательский элемент управления добавляется в TabPage и устанавливается в Dock = DockType.Fill.

Edit2: Сделать сложнее: это иерархия, в которой используется элемент управления: Форма содержит сплиттер с двумя элементами управления (A и B). (B) содержит пользовательский элемент управления (C) с splitContainer. Разбитый контейнер- > панель1 в (C) содержит tabcontrol (D). Этот tabcontrol (D) содержит пользовательский элемент управления (E) (на вкладке). Этот пользовательский элемент управления (E) имеет разделительный контейнер (F), в котором размещается другое пользовательское управление с помощью tabControl (G). В этом tabcontrol (G) есть закладки, и на этих страницах размещается описанный пользовательский элемент управления (H).

Если я поместил элемент управления (H) прямо на панель в разделительном контейнере (C), все будет работать нормально. Поскольку все элементы управления, которые добавляются в splitcontainer или tabbook, устанавливаются в docktype = fill, я не вижу, почему последний элемент управления имеет эти проблемы.

Есть ли какое-либо ограничение в структуре Windows Forms, которое ограничивает количество дочерних элементов управления?

Изменить: я загрузил TestApplication, с помощью которого вы можете воспроизвести эту проблему. http://rapidshare.de/files/49092516/TestApplication.zip.html Это происходит только под Vista. Win XP и 7 работают правильно... Если вы измените размер формы, текстовый блок с кнопкой "..." не изменит размер, но если вы измените размер с помощью вертикального splitContainer, он будет работать.

4b9b3361

Ответ 1

Есть ошибка с глубокой вложенностью, где у ядра заканчивается пространство стека, что приводит к изменению размера, стыковки и привязки, чтобы терпеть неудачу.

См. http://support.microsoft.com/kb/953934

Ответ 2

Вы говорили о "якоре" и "доке", которые могут выполнять аналогичные цели, но действовать по-разному. Ваша проблема может заключаться в том, что вы пытаетесь сделать то и другое, и это мешает вашему поведению. Если нет, попробуйте переключиться с одного на другой.

Похоже, вы дважды проверили антетерию элемента управления, но просмотрели ли вы его с помощью: View- > Other Windows- > Document Outline (очень удобный инструмент, который я только недавно обнаружил)?

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

Удачи.

Ответ 3

Проблема заключается не в глубине вложенности; элементы управления могут быть вложены сколь угодно глубоко. Анкеровка и стыковка обычно не играют хорошо друг с другом. Обычно я предпочитаю состыку с привязкой, но, какое бы решение вы ни выбрали, вам, вероятно, следует избегать их смешивания.