C #: Как получить пользовательский элемент управления для правильного автоматического размера самого - PullRequest
22 голосов
/ 31 августа 2009

У меня есть UserControl, который состоит из Label (вверху), FlowLayoutPanel (заливка, поток сверху вниз и без переноса) и Panel (снизу). Пользовательский элемент управления создает ряд элементов управления на основе списка получаемых данных и добавляет их в FlowLayoutPanel.

Как я могу получить это UserControl для правильного изменения размера, чтобы у FlowLayoutPanel не было полос прокрутки? Я пытался использовать различные комбинации AutoSize и AutoSizeMode на FlowLayoutPanel и на самом UserControl, но я не могу заставить его работать. Либо я в конечном итоге получаю что-то, что вообще не меняет себя, либо оно становится недостаточно большим, либо почти полностью сжимается.

Ответы [ 5 ]

11 голосов
/ 31 августа 2009

Спасибо за все предложения. Решение на этот раз, казалось, установило AutoSize в true как для FlowLayoutPanel , так и для самого UserControl.

Теперь, как получить форму, которая будет содержать этот UserControl, а также некоторые другие элементы управления, которые я пока не могу понять, но я думаю, что это должен быть отдельный вопрос .. .

5 голосов
/ 31 августа 2009

Вы можете использовать свойство Anchor- и Dock UserControl для установки параметров, чтобы края вашего элемента управления были «приклеены» к некоторым другим частям вашего пользовательского интерфейса. Когда пользовательский интерфейс изменится, ваш контроль будет следовать за вами!

Если вы используете привязки и закрепление на всех элементах управления в своем пользовательском элементе управления и устанавливаете их для закрепления краев элемента управления, элементы управления изменят размер с помощью UserControl, и теперь вы можете также устанавливать привязки / закрепление в UserControl.

2 голосов
/ 31 августа 2009

Упаковка FlowLayoutPanel в TableLayoutPanel обеспечит правильное поведение авторазмера.

Ваш UserControl должен выглядеть следующим образом:

UserControl
    TableLayoutPanel (Dock-Fill)
        Row1 : Label
        Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
        Row3 : Panel

Опять же, при использовании этого UserControl, возможно, вам понадобится обернуть его в TableLayoutPanel, используя строку или столбец AutoSize.

Следите за SplitContainers, так как они часто приводят к нарушению баланса в автоматическом режиме.

0 голосов
/ 31 августа 2009

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

0 голосов
/ 31 августа 2009

Я обнаружил, что лучший способ решить эту проблему - использовать некоторый код в событии ControlAdded на панели flowlayout, чтобы отрегулировать высоту панели (высоту, поскольку вы использовали поток TopDown) так:

e.Control.Location.Y + e.Control.Height + some margin

и установить для свойства AutoSize самого элемента управления значение True.

Вы также должны были бы сделать некоторые предложения по стыковке и закреплению согласно ответу Микель.

Эта функциональность может быть инкапсулирована в ваш собственный элемент управления, унаследованный от FlowLayoutPanel и перекрывающий метод ControlAdded.

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