Вот упрощенная версия моего кода:
Код: Выделить всё
public void FillPanel()
{
panel.Controls.Clear();
panel.SuspendLayout();
foreach (var group in )
{
Label groupLabel = new Label
{
Text = $"FlowLayoutPanel Items",
Location = new Point(0, currentY),
AutoSize = true
};
panel.Controls.Add(groupLabel);
currentY += groupLabel.Height ;
FlowLayoutPanel flowPanel = new FlowLayoutPanel
{
FlowDirection = FlowDirection.LeftToRight,
Location = new Point(0, currentY),
Size = new Size(panel.Width, CalculateHeight()),
AutoSize = false,
WrapContents = true
};
foreach (var item in group)
{
var myUserControlPanel = new myUserControlPanel(item);
flowPanel.Controls.Add(myUserControlPanel);
}
panel.Controls.Add(flowPanel);
currentY += flowPanel.Height + 10;
}
panel.AutoScroll = true;
panel.ResumeLayout();
}
Я уже пробовал:
-DoubleBuffering-Добавьте myUserControlPanel в List и затем один раз в Panel.Controls.Add(listToAdd.ToArray());
Метод FillPanel() выполняет все свои задачи за 50 мс. После этого установка для свойства Visible формы значения true займет дополнительные 5 секунд для отображения формы и всех ее элементов управления.
Существует ли лучшая стратегия макета, которая повысила бы производительность?
Подробнее здесь: https://stackoverflow.com/questions/790 ... n-winforms