В разработке программного обеспечения нет ничего невозможного. Невозможное просто занимает больше времени.
Я исследовал проблему. Если действительно нужна Flow Layout, это можно сделать, немного поработав. Поскольку FlowLayoutPanel размещает элементы управления, особо не задумываясь о количестве строк / столбцов, а скорее о совокупной ширине / высоте, вам может потребоваться отслеживать, сколько элементов управления вы уже добавили. Прежде всего, установите для параметра autosize значение false, а затем подключите собственную логику управления размером к событиям ControlAdded / ControlRemoved. Идея состоит в том, чтобы установить ширину и высоту панели таким образом, чтобы вы получили желаемое количество столбцов.
Грязное доказательство концепции:
private void flowLayoutPanel1_ControlAdded(object sender, ControlEventArgs e)
{
int count = this.flowLayoutPanel1.Controls.Count;
if (count % 4 == 0)
{
this.flowLayoutPanel1.Height = this.flowLayoutPanel1.Height + 70;
}
}
если панель изначально имеет ширину для 4 элементов управления, она будет генерировать строку для новых. Обработчик ControlRemoved должен проверить то же самое и уменьшить высоту панели или получить все содержащиеся элементы управления и разместить их снова. Вы должны подумать об этом, это может быть не то, что вам нужно. Это зависит от сценария использования. Все ли элементы управления будут одного размера? Если нет, вам понадобится более сложная логика.
Но на самом деле подумайте о макете таблицы - вы можете обернуть его во вспомогательный класс или получить из него новый элемент управления, где вы разрешите всю логику размещения элементов управления. FlowLayout упрощает добавление и удаление элементов управления, но затем включается код управления размером. TableLayout дает вам хороший механизм для строк и столбцов, управлять шириной и высотой проще, но вам понадобится больше кода для изменения размещения всех контролирует, хотите ли вы удалить его из формы динамически.
person
usualexpat
schedule
17.02.2010