Winforms: FlowLayoutPanel с стыковкой - PullRequest
4 голосов
/ 22 июня 2011

Это в winforms.Я создаю пользовательский элемент управления, который в основном представляет собой FlowlayoutControl, заполненный другими пользовательскими элементами управления.Мне нужно, чтобы каждый из элементов управления был добавлен в верхнюю часть предыдущего (слева направо).К сожалению, похоже, что flowlayoutcontrol игнорирует любые свойства стыковки.Есть ли способ закрепить элементы управления внутри?Мне нужно, чтобы заполнить элемент слева направо, но элементы должны быть расположены в виде списка.На самом деле нет никакого кода, который я могу предоставить из-за того, что нужно выяснить, какой подход выбрать.

Ответы [ 3 ]

11 голосов
/ 29 ноября 2011

Как правильно настроить FlowLayoutPanel для правильной стыковки. Исходя из исходного вопроса, вы хотите что-то вроде представления списка. Важно знать, что ОДИН из элементов в вашем списке (самый широкий) определяет «виртуальный столбец» в FlowLayoutPanel. Остальные предметы будут следовать за ним. Вы можете доказать это в конструкторе VS, перетащив один из элементов вправо. За ним будет следовать «виртуальный столбец», а если другие элементы привязаны, они будут следовать за виртуальным столбцом.

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

Делайте все это программно, обрабатывайте событие Layout на FlowLayoutPanel и вставляйте код, подобный приведенному ниже. Важно, чтобы в конструкторе все элементы в вашем списке не были пристыкованы, а их привязка была установлена ​​на «нет». Вчера я потратил на это целый день, и в дизайнере это помогло сделать приведенный ниже код.

flowLayoutPanel.Controls[0].Dock = DockStyle.None;                
flowLayoutPanel.Controls[0].Width = flowLayoutPanel.DisplayRectangle.Width - lowLayoutPanel.Controls[0].Margin.Horizontal;

for (int i = 1; i < flowLayoutPanel.Controls.Count; i++)
{
    flowLayoutPanel.Controls[i].Dock = DockStyle.Top;
} 
4 голосов
/ 22 июня 2011

FlowLayoutPanel.FlowDirection Свойство указывает направление потока элемента управления FlowLayoutPanel.

FlowLayoutPanel.WrapContents Свойство указывает, должен ли элемент управления FlowLayoutPanel обернуть его содержимое или позволитьсодержимое должно быть обрезано.

1 голос
/ 22 июня 2011

Свойства закрепления FlowLayoutPanel предназначены для самой панели (например, если вы хотите, чтобы FlowLayoutPanel пристыковался слева от формы и т. Д.), А не для контейнера элементов управления внутри него.

Попробуйте воспроизвестисо свойствами DefaultPadding и DefaultMargin они применяются к интервалу элементов управления, которые он содержит

...