Как избежать большого количества пользовательских элементов управления в форме - PullRequest
4 голосов
/ 15 июня 2011

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

Я пытался использовать SuspendLayout и ResumeLayout, но это не очень помогло, их использование сокращает время, но все еще слишком долго.

Есть некоторые идеи, которые я не могу реализовать по разным причинам:

  • как-то работать только с элементами, которые попадают в поле зрения (как игнорировать других?)
  • реализовать поведение элемента управления Grid - создавать пользовательский элемент управления только в режиме редактирования, но трудно рисовать остальные

Благодарен за любой совет

РЕДАКТИРОВАТЬ:

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

Ответы [ 4 ]

2 голосов
/ 15 июня 2011

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

Если вам нужны более продвинутые возможности в каждой строке, такие как свойства Expander, которые вы упомянули, то я думаю, что вам стоит заглянуть в WPF. С WPF вы обладаете огромной гибкостью, чтобы полностью спроектировать элементы управления пользовательского интерфейса так, как вы этого хотите, и производительность по-прежнему очень хорошая.

Если ни один из них не работает для вас, то как насчет перепроектирования вашего интерфейса? Как уже упоминалось, нет никакого способа уменьшить удар по производительности для большого количества элементов управления. Так как насчет показа одной строки или только нескольких строк за раз, с фильтром или средством поиска, чтобы позволить пользователю найти нужную строку (и)? Или показать все строки, но использовать только минимальные элементы управления в каждой строке, и чтобы пользователь дважды щелкнул по строке, чтобы открыть диалоговое окно для отображения более подробной информации о строке? Так или иначе, вам придется сократить количество первоначально отображаемых элементов управления. Это всего лишь несколько идей.

1 голос
/ 15 июня 2011

Я согласен с @Cody, но в случае, если "раздеть некоторые из тех, что у тебя есть" не вариант ... позвольте мне сделать еще один шаг вперед ...

Вы упомянули, что у вас есть список.

Я бы взял подсказку из iOS playbook, и у меня было бы только количество активных элементов управления, необходимых для отображения списка на экране.

Например; Если в списке есть место для 30 элементов на экране, вы можете повторно использовать те же 30 элементов управления, которые пользователь просматривает / просматривает в списке.

Что поднимает еще один момент - иногда неплохо изменить навигацию. Если у вас есть один огромный список сейчас, возможно, стоит подумать о функциях «подкачки», где вы отображаете только x количество элементов на «страницу».

Независимо от того, когда вы дойдете до этой точки в приложении и у вас есть реальные требования к скорости загрузки / использованию памяти, пришло время выкрутить старую книгу по настройке производительности и внедрить проверенные шаблоны, такие как повторное использование, кэширование и т. д. Обычно это не всегда красиво и делает ваше решение более сложным, но вы делаете то, что вам нужно, чтобы оно работало правильно.

1 голос
/ 15 июня 2011

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

Независимо от того, добьетесь ли вы этого, удалив некоторые из тех, что у вас есть, или с помощью нестандартного рисования более легких версий встроенных аналогов, решать только вам. Но я очень рекомендую придерживаться встроенных элементов управления и просто отказаться от некоторых из тех, которые вы используете сейчас.

Помимо очевидных проблем с производительностью, описанный вами сценарий гарантированно создает ошибку переполнения пользователя, которую не может исправить ни один отладчик.

0 голосов
/ 15 июня 2011

Использовать DataGridView и настраивать столбцы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...