2011-07-13 90 views
8

Estoy utilizando un TableLayoutPanel para fines de marcado de asistencia. He agregado controles (un Panel y una Etiqueta) dentro de TableLayoutPanel y he creado eventos para ellos. En algunas condiciones eliminé todos los controles y procedí a unir los mismos controles en diferentes posiciones de TableLayoutPanel. Mientras vuelve a enlazar los controles, el TableLayoutPanel parpadea y es demasiado lento en la inicialización.Cómo evitar el parpadeo en TableLayoutPanel en C# .net

Respuesta

13

Suspenda el diseño hasta que haya agregado todos sus controles.

TableLayoutPanel panel = new TabelLayoutPanel(); 
panel.SuspendLayout(); 

// add controls 

panel.ResumeLayout(); 

Consulte también el uso del doble almacenamiento en búfer. Deberá crear una subclase de TableLayoutPanel. Vea un ejemplo here.

+0

Esto era muy útil, estoy recibiendo mucho menos fluctuación ahora. Gracias. – Jmnstr

-1

Como una mejora de lo anterior, he tenido mejores resultados con:

TableLayoutPanel panel = new TabelLayoutPanel(); 
    panel.SuspendLayout(); 
    panel.StopPaint(); 

    // add controls 

    panel.ResumePaint(); 
    panel.ResumeLayout(); 
+8

'StopPaint' y' ResumePaint' no son métodos nativos del control TableLayoutPanel. Obviamente está usando una extensión, que no incluyó en su respuesta. – LarsTech

1

utilizar este panel para establecer la propiedad dBuffer cierto

public partial class MyTableLayoutPanel : TableLayoutPanel 
{ 
     public MyTableLayoutPanel() 
     { 
      InitializeComponent(); 
     } 

     public MyTableLayoutPanel(IContainer container) 
     { 
      container.Add(this); 
      InitializeComponent(); 
     } 

     /// <summary> 
     /// Double buffer 
     /// </summary> 
     [Description("Double buffer")] 
     [DefaultValue(true)] 
     public bool dBuffer 
     { 
      get { return this.DoubleBuffered; } 
      set { this.DoubleBuffered = value; } 
     } 
} 
+2

¿Podría describir por qué el dBuffer se debe establecer en verdadero? –

3

Esto funcionó muy bien para mí Remove flickering due to TableLayoutPanel & Panel in windows form

Aquí lo que hay en ese enlace (copia literal)

eliminar completamente el parpadeo debido a TableLayoutPanel & Panel de ventanas forman ir de la siguiente manera: = - 1. Establezca la propiedad de búfer doble de Form = true. 2. Pega Siguiendo 2 funciones en form.cs

#region .. Double Buffered function .. 
    public static void SetDoubleBuffered(System.Windows.Forms.Control c) 
    { 
     if (System.Windows.Forms.SystemInformation.TerminalServerSession) 
      return; 
     System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered", 
     System.Reflection.BindingFlags.NonPublic | 
     System.Reflection.BindingFlags.Instance); 
     aProp.SetValue(c, true, null); 
    } 

    #endregion 


    #region .. code for Flucuring .. 

    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 
      cp.ExStyle |= 0x02000000; 
      return cp; 
     } 
    } 

    #endregion 
  1. Call SetDoubleBuffered(“TableLaoutPannel_controlName”) para cada TableLayoutPannel, Pannel, Splitcontainer, Datagridview & todo recipiente controles.

Gracias a RhishikeshLathe Publicado el 16-Feb-14 20:11 pm

+1

Agregó un bloque de comillas allí. Sin embargo, tenga en cuenta que añadir solo un enlace a la otra publicación y copiar todos los contenidos no es una atribución propia, per se. Si no tiene nada que agregar aparte de los detalles en el enlace, siempre es mejor dejarlos como comentarios. Cuídate la próxima vez. –

Cuestiones relacionadas