Это действительно просто.
У меня есть TableLayoutPanel, которая заполняется элементами управления (только метки, кнопки и некоторые панели с кнопками) на основе запроса к базе данных.Когда необходимо обновить данные, я использую TableLayoutPanel.Controls.Clear ().К сожалению, это очень медленная операция.Я ожидал бы, что это будет быстрее, чем код, заполняющий таблицу, но это по крайней мере в 3 или 4 раза медленнее.
Я окончательно доказал, что медлительность происходит при выполнении Controls.Clear (), выполнив это какодна вещь, сделанная для TableLayoutPanel после отображения окна сообщения (затем процедура возвращается).Органы управления заметно исчезают снизу вверх.Когда набор записей используется для повторного заполнения TableLayoutPanel, скорость элементов управления, появляющихся сверху вниз, почти выше, чем я вижу.
Я уже делаю TableLayoutPanel.SuspendLayout () и ResumeLayout ().
Использование this.DoubleBuffered = true
в форме, похоже, ничего не делает.
Я мог бы просто избавиться от всего элемента управления и воссоздать его через код, но это большая боль и делает приятнымДизайнер форм GUI бессмыслен.Мне нужно было бы покопаться в каждом свойстве, которое я установил для элемента управления, и создать для него строку кода (хотя я думаю, что я мог бы извлечь это из самого кода конструктора, он все еще чувствует себя неправильно).
Любые идеи о том, как сделать работу быстрее?Я даже открыт для использования других методов, кроме TableLayoutPanel ... Мне просто нужна свобода, чтобы поместить несколько кнопок на ячейку или запрет, чтобы иметь возможность охватывать столбцы в заголовке таблицы.
Может ли C # хотя бызаморозить всю форму, пока она перерисовывается, а затем рисовать все сразу?