Foros del Web » Programación para mayores de 30 ;) » .NET »

Un Aporte: como evitar el parpadeo en los ListView de .NET (para c#)

Estas en el tema de Un Aporte: como evitar el parpadeo en los ListView de .NET (para c#) en el foro de .NET en Foros del Web. Saludos amigos, en esta oportunidad no voy a hacer una pregunta o dejar un inquietud, solo quiero es agregar un aporte a la comunidad de ...
  #1 (permalink)  
Antiguo 17/08/2009, 11:24
Avatar de ciberedwuard2003  
Fecha de Ingreso: agosto-2009
Mensajes: 10
Antigüedad: 14 años, 8 meses
Puntos: 0
De acuerdo Un Aporte: como evitar el parpadeo en los ListView de .NET (para c#)

Saludos amigos, en esta oportunidad no voy a hacer una pregunta o dejar un inquietud, solo quiero es agregar un aporte a la comunidad de programadores.

Bueno el caso es el siguiente: resulta ser que cuando programan en .NET y usan el control ListView para agregar un conjunto de datos (hablamos de muchos, aprox. mas de 500 items) el ListView tiende a parpadear.

otro caso es cuando usamos el control ListView y un control Timer para que cada cierto tiempo se actualizen uno o X datos en nuestro control ListView, igualmente este parpadea.

la pregunta es porque parpadea? bueno investigando un poquito he encontrado que el problema tiene que ver con que la clase ListView redibuja todo el control y no el item que queremos actualizar o modificar, es algo como que hicieran un .refresh() por cada cambio que haga lo cual provoca que de re-dibuje nuevamente todo el control en su form lo cual es algo molesto y poco practico para nuestro(s) proyecto(s)

Bueno la solucion simplemente activar la propiedad "DoubleBuffered" a nuestro(s) control(es) LisView en el Form_Load() procedure asi por ejemplo:


Código:
//cuando inicia el formulario
private void frmMain_Load(object sender, EventArgs e)
{
            
      System.Reflection.PropertyInfo propiedadListView = typeof(ListView).GetProperty("DoubleBuffered",  System.Reflection.BindingFlags.NonPublic |   System.Reflection.BindingFlags.Instance);
     propiedadListView.SetValue( myListView, true, null);
            
     //aqui su otros codigos... etc....
}
Bueno esto se aplica a un ejemplo en c# usando un form con 1 listview llamado myListView

(Nota:el nombre de myListView debe ser reemplazado por el nombre de su control ListView de su form)

Bueno espero que esto pueda ayudar y sacar de dudas a muchos, de igual forma cualquier otro aporte relacionado con este control considero que seria bien recibida.

Saludos...
  #2 (permalink)  
Antiguo 26/02/2010, 13:46
 
Fecha de Ingreso: septiembre-2007
Mensajes: 11
Antigüedad: 16 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Un Aporte: como evitar el parpadeo en los ListView de .NET (para c#)

Exelente aporte amigo , estaba buscando algo así desde hace mucho tiempo.
Ahora solo me falta hacer algo para "actualizar" los item de la lista si existen, agregar los que no existen y borrar los que ya no están, en vez de borrar todos los items y agregarlos todos nuevamente.

Nota: para los que quieran el código en VB.NET

Código VB.NET:
Ver original
  1. Dim propiedadListView As System.Reflection.PropertyInfo
  2.         propiedadListView = GetType(ListView).GetProperty("DoubleBuffered", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
  3.         propiedadListView.SetValue(lstProcesos, True, Nothing)

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:44.