Автообертывание FlowLayoutPanel не работает с авторазмером

Платформа.NET / C# / Windows Forms

Я хотел бы, чтобы FlowLayoutPanel автоматически скорректировал свою ширину или высоту в зависимости от количества средств управления в нем. Это также должно изменить количество столбцов/строк, если существует недостаточно пространства (оберните его содержание). Проблема состоит в том, что, если я установил авторазмер тогда, flowlayoutpanel не обертывает средства управления, которые я вставляю. Какое решение является лучшим?

Спасибо!

9
задан Yegor 24 September 2009 в 00:28
поделиться

3 ответа

 System.IO.Path.GetFullPath(pathA).Equals(System.IO.Path.GetFullPath(PathB));
-121--884660-

Следующие должны сделать это...

M-x load-file
-121--524981-

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

0
ответ дан 3 November 2019 в 07:14
поделиться

Пробовали ли вы использовать TableLayoutPanel? Она очень полезна для размещения элементов управления внутри ячеек.

1
ответ дан 3 November 2019 в 07:14
поделиться

В разработке программного обеспечения нет ничего невозможного. Невозможное просто занимает больше времени.

Я исследовал проблему. Если действительно нужна 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 дает вам хороший механизм для строк и столбцов, управлять шириной и высотой проще, но вам понадобится больше кода, чтобы изменить размещение всех контролирует, хотите ли вы удалить его из формы динамически.

1
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: