При изменении размера окна привязанные элементы управления не изменят свой размер (остерегайтесь 56 КБ) - PullRequest
7 голосов
/ 12 ноября 2010

Этот действительно бьет меня по спине.У меня есть форма, созданная и принадлежащая основной форме приложения, которая используется для поиска записей.Форма размещена в закрепленной TableLayoutPanel с комбинацией строк / столбцов абсолютного размера и размера в процентах, так что мои метки остаются одинакового размера при увеличении элементов управления вводом данных и результатами.Мы говорим о 20 элементах управления.

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

Я использовал Google-fu и нашел этот ТАК вопрос , который указал мне на эту статью в MSKB.Я создал производный FlowLayoutPanel и производный TableLayoutPanel с многопоточными вызовами и вставил их, но он все еще не работает.Это ЕДИНСТВЕННАЯ форма, в которой это происходит, и другая форма также имеет довольно глубокое вложение (она использует TabControl и TableLayoutPanel для разметки элементов управления вводом данных, но не RB).

Другая важная информация:

  • Не заданы свойства MaxSize.
  • Ничто не привязано в этой форме, за исключением верхнего-левого по умолчанию;почти все залито в контейнер.Однако дочерний пользовательский элемент управления, содержащий таблицу результатов поиска, размещается внутри с помощью привязки;это не было проблемой в другой форме, в которой я использую эти элементы управления, где я заполнил их стыковкой с SplitPanels (две вложенные, не менее).
  • RadioButtons и Labels установлены на AutoSize, но больше ничего нет.Похоже, что это поведение по умолчанию для этих элементов управления, даже если значения выделены жирным шрифтом в Designer и соответствуют настройкам других окон, которые правильно изменяют размер.
  • События изменения размера запускаются для формы, но не для TLP.
  • Поведение не меняется, когда TLP привязывается к окну INSTEAD, когда его пристыковывают (это никогда не бывает одновременно).

Я тут рву волосы.Справка!

Редактировать : Вот некоторые из запрошенных изображений, показывающих поведение макета в конструкторе и в приложении:

alt text alt text alt text alt text

Элементы управления, начинающиеся с «Nested», наследуются непосредственно от встроенных элементов управления панели, и их единственным изменением является переопределение OnSizeChanged () для асинхронного вызова базового метода (обходной путь из статьи базы знаний)).Он не работает и со встроенными панелями, как я уже говорил.Как видно из двух последних окон, TLP mainLayout просто не растет, даже если он прикреплен к окну в конструкторе.

Ответы [ 5 ]

6 голосов
/ 12 ноября 2010

Epic Facepalm.

В конструкторе этой формы (сторона кода пользователя) я вызвал SuspendLayout(), чтобы выполнить некоторые дополнительные настройки, которые могут повлиять на макет.Угадайте, что я НЕ звонил, когда закончил.

Если вы вызываете SuspendLayout для внесения собственных изменений в макет, всегда вызывайте ResumeLayout(true) (или ResumeLayout(false), а затем PerformLayout()), когдавсе готово.

4 голосов
/ 12 ноября 2010

Элементы управления привязаны (свойство .Anchor) или они прикреплены?Я обнаружил, что установка одного отключает другой.Я бы заглянул в файл .Designer.cs и выяснил, установлены ли свойства dock и anchor, и, возможно, даже удалил свойства из источника (разумеется, заранее).

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

1 голос
/ 06 января 2011

Попробуйте установить Dock = DockStyle.Fill на контейнере TableLayoutPanel.

1 голос
/ 12 ноября 2010

У меня были проблемы с тем, что usercontrol'ы не выполняют то, что я ожидаю, так как вы можете описать это как-то, когда свойство autoconalemode usercontrol установлено в 'font' -Попробуйте изменить его для наследования.

0 голосов
/ 12 ноября 2010

Не закрепляйте и не привязывайте отдельные элементы управления внутри TableLayoutPanel. Это редко делает то, что вы хотите.

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