Estoy tratando de hacer un tipo de control ImageListBox
que mostrará una gran cantidad de miniaturas, como la que utiliza Picasa.Rellenar un FlowLayoutPanel con una gran cantidad de controles y miniaturas de pintura bajo demanda
Este es mi diseño:
Tengo un FlowLayoutPanel
que se rellena con una gran cantidad de objetos UserControl
, por ejemplo, 4.000. A cada UserControl
se le asigna un delegado para el evento Paint
. Cuando se llama al evento Paint
, comprueba un caché de memoria para la miniatura y, si la imagen no está en el caché, lo recupera del disco.
que tienen dos problemas que estoy tratando de resolver:
Parece que WinForms se disparará un evento
Paint
incluso si elUserControl
no está a la vista. De hecho, solo 10 controles están a la vista, el resto no (elFlowLayoutPanel.AutoScroll
está configurado entrue
). Como resultado, intenta recuperar miniaturas de todas las imágenes y eso lleva mucho tiempo.Agregando los objetos
UserControl
alFlowLayoutPanel
toma un tiempo algo largo, unos 2-3 segundos. Puedo vivir con ella, pero me pregunto si hay una mejor manera de hacerlo que:UserControl[] boxes = new UserControl[N]; // populate array panel.SuspendLayout(); panel.Controls.AddRange(boxes); panel.ResumeLayout();
Tienen casi el mismo problema. Estoy trabajando con "contratos" que pueden tener x filas (x controles en el panel flexible) y también veo el largo tiempo para llenar el panel con todos los controles. 2-3 segundos para 200 elementos (ni siquiera 4000 como en su caso). Ill "fav" esta pregunta con seguridad. ;) – Stefan
Im allso using suspendlayout/resumelayout y visible verdadero/falso al llenar objetos. – Stefan