.Net TableLayoutPanel – Очистка Средств управления является Очень Медленной

Это действительно просто.

У меня есть TableLayoutPanel, который заполняется со средствами управления (просто Маркировки, Кнопки и некоторые Панели с кнопками) на основе запроса базы данных. Когда данные должны быть обновлены, я использую TableLayoutPanel. Средства управления. Ясный (). К сожалению, это - очень медленная операция. Я ожидал бы, что это будет быстрее, чем код, заполняющий таблицу, но это - по крайней мере в 3 или 4 раза медленнее.

Я окончательно доказал, что замедление при выполнении Средств управления. Ясный () путем выполнения этого как единственной вещи, сделанной к TableLayoutPanel после того, как, окно сообщения отображено (затем возвраты процедуры). Средства управления явно исчезают с самого начала. Когда recordset используется для перезаполнения TableLayoutPanel, скорость средств управления, появляющихся сверху донизу, почти быстрее, чем я вижу.

Я уже делаю TableLayoutPanel. SuspendLayout () и ResumeLayout ().

Используя this.DoubleBuffered = true на форме, кажется, ничего не делает.

Я мог просто Расположить все управление и воссоздать его через код, но это - большая боль и делает наличие хорошего конструктора форм GUI бессмысленный. Я должен был бы вырыть в каждое свойство, которое я установил на управлении и создаю строку кода для него (хотя я предполагаю, что мог вытащить это из самого кода разработчика, это все еще чувствует себя неправильным).

Какие-либо идеи о том, как сделать задание быстрее? Я даже открыт для использования других методов помимо TableLayoutPanel... Мне просто нужна свобода поместить несколько кнопок на ячейку или запрет что смочь охватить столбцы в заголовке таблицы.

C# может, по крайней мере, заморозить целую форму, в то время как это перерисовывает, и затем нарисуйте внезапно?

7
задан ErikE 11 May 2011 в 18:42
поделиться

1 ответ

Если я собираюсь построить создать динамический графический интерфейс, я всегда буду делать это в коде.Но вначале я просто начинаю с дизайнера на фиктивной форме и стиль каждого из них контролирует то, как мне (или лучше клиенту) нравится (а). После этого я заглядываю в файл Designer.cs и копирую из него необходимые настройки свойств в некоторую заводскую функцию, например

private TextBox CreateTextBox(string name, /* maybe other parameters */)
{
    var textBox = new TextBox();
    textBox.Name = name;
    //Other settings from given parameters...

    //Further settings which are all the same for these kind of control
    textBox.KeyDown += (sender, e) => {};

    return textBox;
}

. Поэтому я удостоверяюсь, что каждый элемент управления выглядит и выглядит одинаково в моем графическом интерфейсе. Это будет происходить на каждом уровне моей поверхности (начиная с небольших элементов управления, таких как TextBox , до контейнеров, таких как GroupBox или TableLayoutPanel .

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

Со своей стороны я могу только посоветовать вам переместить свой код из дизайнера в самописную функцию. Вначале (как всегда) больше работы, но потом легче вносить еще большие изменения в макет.

0
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

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