2016-08-27 3 views
0

Я добавляю к своей основной форме UserControl с свойством Dock, установленным для заполнения. Пользователь UserControl имеет FlowLayoutPanel, который также закреплен (Fill), а для свойства AutoScroll установлено значение True.Пустое пространство в FlowLayoutPanel при максимизации формы

FlowLayoutPanel содержит 5 групповых боксов, каждый из которых имеет свой собственный размер. Когда форма (или UserControl) находится в его нормальном размере (716x520), групповые боксы идут сверху вниз, все хорошо.

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

Вот некоторые изображения, чтобы объяснить это лучше: Normal size of the UserControl When the UserControl is maximized

+0

Когда вы максимизируете свою форму, ваша панель становится больше. Таким образом, FLP пересчитывает раскладку, и это то, с чем она возникла. Он не пытается решить проблему печально известной упаковки в бутылках, это проблема NP-hard. Это нужно делать за меньшее время, чем мгновение ока. Особенность, а не ошибка. –

+0

Так есть решение этого или я должен просто принять это? – Haytam

ответ

0

Очевидно вы задаете LeftToRight для FlowDirection вместо TopDown. Поэтому, когда эта панель макета достаточно широкая, в первом ряду будет место для других групповых ящиков ...

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

Так что если вы измените направление, у вас будет один столбец, если у вас достаточно высоты.

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

Другая возможность была бы использовать макет на основе таблицы. Учитывая, что все групповые коробки имеют одинаковую ширину, в этом нет необходимости (это немного проще в использовании макета потока, когда он работает).

На практике, однако, вы можете предпочесть отображать все групповые поля на экране, если есть достаточно места и избегать полосы прокрутки. Это можно сделать с помощью раскладки потока. В вашем случае вы можете использовать поток TopDown, верхнюю стыковку, панель макета автоматическое определение размера (и, вероятно, установка автоматического прокрутки на пользовательском контроле).

+0

Ну, я просто сделал несколько тестов. Если вам нужен макет TopDown, тогда панель макета должна быть закреплена слева, но вы получите горизонтальную полосу прокрутки, если не все групповые поля могут поместиться. У вас есть В противном случае, «LeftToRight» и «Top» док-станция предоставят вам ту же проблему, что и у вас изначально ... Таким образом, «AutoSize» и «FlowDirection» связаны, и вы не можете получить именно то, что вы, возможно, захотите, без специального кода. – Phil1970

+0

Я пробовал TopDown FlowDirection, но когда форма максимизирована и размер UserControl (и FLP) увеличен, достаточно, чтобы иметь 2 групповых поля в одной строке, он отображает только 1 групповой ящик на линию, и он полностью опускается. Есть ли способ показать им Top to Bottom, когда он равен 716x520, но когда он достаточно большой, покажите 2 групповых поля на линии, но без этих пробелов? – Haytam

+0

Если макет «TopDown», высота контейнера фиксирована и регулировка ширины. У вас не будет никакого пробела, потому что первый столбец заполняется сверху, затем вторым и т. Д. Но поскольку изменяющееся измерение равно X, полоса прокрутки будет горизонтальной, если места недостаточно.Если вы хотите сначала заполнить строку, тогда все групповые поля должны иметь одинаковую высоту, чтобы избежать этого пространства. Поместите номер в качестве заголовка ваших групповых ящиков, и будет легко разобраться в макетировании горячего потока. Если после того, как я попробовал варианты, я сказал, что вы не можете получить то, что хотите, тогда единственное решение - сделать свой собственный макет. – Phil1970

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