2010-09-16 4 views
12

Я создаю элемент управления, который содержит 15x15 = 225 кнопок, и его необходимо изменить. Поскольку это сетка, привязка и стыковка не будут работать. Я пробовал как TableLayoutPanel, так и обработку события изменения размера вручную для управления размерами и размерами. В обоих случаях изменение размера неприемлемо медленное. Маскировка приостановки/возобновления в функции изменения размера, когда я вручную обрабатываю макет, не помогает.C# Winforms: Эффективное отображение многих элементов управления

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

Редактировать

Я знаю, что много кнопок. Мой вопрос является техническим; не о дизайне пользовательского интерфейса.

+2

Это чертовски много кнопок. Какого черта вам нужно, чтобы было много кнопок? –

+0

+1 к Alastair Питтс. Мы должны избегать так много кнопок, появляющихся в графическом интерфейсе. Я думаю, что конечные пользователи согласны со мной. –

+0

Профилируйте приложение при изменении размера, чтобы понять, почему он так долго. –

ответ

6

WinForms не справляется с отображением этого множества элементов управления в то же время, к сожалению.

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

Но в вашем случае это не похоже на выбор. Вы делаете что-то вроде игры в стиле тральщика? Там у вас есть сетка кнопок, которые можно щелкнуть. В такой ситуации я бы посоветовал вам обратиться за индивидуальным владельцем нарисованного элемента управления, где вы объединяете все кнопки в одном элементе управления. Не создавайте составной элемент управления, который содержит 225 кнопок - это совсем не поможет :-)

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

+0

Gotcha. Можете ли вы указать мне на что-то, кроме «просто не справиться с этим» - есть где-то сообщение в блоге/производительности, которое может помочь мне понять, что заставляет вещи умирать? +1 за то, что вы не пытаетесь смириться с техническим вопросом. Я знаю, что много кнопок, и я это понимаю. Пользовательский контроль. – phillipwei

+0

Я говорю из личного опыта здесь :-) Гораздо лучше, чем любой пост в блоге ... хе-хе. –

+0

Нет. Я попытался сделать подобный материал и оказался совершенно непригодным для использования. Производительность в норме до определенной точки, где она ломается. Может быть, вы можете уйти с сеткой 10x10, может быть, 12x12 или 8x8, но в определенный момент она станет непригодной. –

Смежные вопросы