2010-09-16 15 views
12

Estoy construyendo un control que comprende 15x15 = 225 botones, y debe ser de tamaño variable. Debido a que es una cuadrícula, el anclaje y el acoplamiento no funcionarán. He probado tanto TableLayoutPanel como el manejo del evento de cambio de tamaño para colocar y controlar manualmente el tamaño. En ambos casos, el cambio de tamaño es inaceptablemente lento. Suspender/Reanudar diseño en la función de cambio de tamaño cuando estoy manejando manualmente el diseño no ayuda.C# Winforms: mostrando eficientemente muchos controles

¿Hay algo fundamental que pueda cambiar para acelerar las cosas, o es solo una limitación de los controles nativos? Entiendo que puedo crear un control personalizado desde cero, manejar los clics y pintarme, aunque prefiero seguir con los controles nativos si es posible.

Editar

sé que es un montón de botones. Mi pregunta es técnica no uno sobre el diseño de UI.

+2

Eso es un infierno de muchos botones. ¿Para qué diablos necesitas tantos botones? –

+0

+1 a Alastair Pitts. Deberíamos evitar que aparezcan tantos botones en la GUI. Creo que los usuarios finales también están de acuerdo conmigo. –

+0

Perfile la aplicación mientras cambia el tamaño para ver por qué tarda tanto. –

Respuesta

6

WinForms no se encarga de mostrar estos muchos controles al mismo tiempo, lamentablemente.

Si estuviera en su situación, consideraría primero si podía dividir el formulario en varias páginas. En muchos casos, eso también sería más fácil de entender para el usuario.

Pero en su caso eso no parece ser una opción. ¿Estás haciendo algo así como un juego de estilo minesweeper? Ahí tienes una grilla de botones en la que se puede hacer clic. En tal situación, le sugiero que elija un control personalizado dibujado por el propietario donde consolide todos los botones en un solo control. No cree un control compuesto que contenga 225 botones; eso no ayudará en absoluto :-)

Una última opción podría ser cambiar a WPF. WPF usa renderizado acelerado por hardware, por lo que puede ser más rápido, pero con tantos controles ni siquiera eso puede ayudar.

+0

Gotcha. ¿Puede señalarme algo más allá de "simplemente no puedo manejarlo"? ¿Hay alguna publicación de blog/explicación de rendimiento en alguna parte que pueda ayudarme a entender qué está causando que las cosas mueran? +1 por no intentar inteligente-alecky eludir la pregunta técnica. Sé que son muchos botones y lo entiendo. Control personalizado es. – phillipwei

+0

Hablo por experiencia personal aquí :-) Mucho mejor que cualquier publicación de blog ... jeje. –

+0

No, realmente. Intenté hacer cosas similares y terminé con una forma completamente inutilizable. El rendimiento está bien hasta cierto punto donde se descompone. Tal vez pueda salirse con la suya con una grilla de 10x10, tal vez 12x12 u 8x8, pero en cierto punto se volverá inservible. –

Cuestiones relacionadas