Я пытаюсь динамически создать довольно большую TableLayoutPanel для приложения, над которым я работаю.Как я читал из других вопросов, класс TableLayoutPanel страдает от значительных проблем с производительностью при обработке большого и изменяющегося содержимого;Я, однако, зашел слишком далеко, чтобы переключиться на что-то еще сейчас.
Мне удалось обойти большинство проблем, приостановив макет перед добавлением элементов управления в отдельные ячейки.Остается одна проблема - когда таблица впервые показывается, кажется, что требуется немного времени, прежде чем фоновые цвета (только белый) и все остальное, готовые для отображения - как чуть меньше секунды уродства.Я попытался сделать все макеты при запуске, чтобы после окончательного добавления элемента управления не осталось никаких вычислений, но его первый рисунок остается безобразным.Странно то, что когда элемент управления снова отображается позже (я сохраняю его в памяти, а не воссоздаю его все время) после некоторого удаления из основной формы, он сразу появляется без какой-либо разметки.Это заставляет меня верить, что что-то происходит, когда я впервые добавляю элемент управления к дочернему элементу управления главной формы, что я не воспроизвел в своем макете - вопрос в том, что?Чтобы форсировать макет элемента управления сразу после его инициализации, но до его первого отображения, я делаю следующее:
table.SuspendLayout();
// Create a whole lot of controls here and add them to the TableLayoutPanel
table.ResumeLayout();
table.Size = reportControl.Panel2.ClientSize;
table.PerformLayout();
table.SuspendLayout();
// Add the TableLayoutPanel to the main form here
Разве этого не достаточно?Если я не очень ошибаюсь, я не касаюсь TableLayoutPanel между этим блоком кода и когда он добавляется в основную форму.Тем не менее, когда он добавляется впервые, он выглядит иначе, чем во второй раз.Да, и TableLayoutPanel имеет двойную буферизацию, так что я думаю, что это не так.