2016-06-05 1 views
1

Je reçois des résultats conflictuels de Google et je me demandais si cela peut être clarifié s'il vous plaît?DoubleBuffered contre SetStyle

J'ai:

typeof(TableLayoutPanel) 
    .GetProperty("DoubleBuffered", 
     System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) 
    .SetValue(tableLayoutPanel, true, null); 

typeof(TableLayoutPanel) 
    .GetMethod("SetStyle", 
     System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) 
     .Invoke(tableLayoutPanel, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true }); 

Mais on m'a dit que si je mets DoubleBuffered à vrai que je ne ai pas besoin de régler manuellement les 3 styles que le système va le faire en interne. En ce moment, j'appelle les deux.

+0

Can » t vous juste le tester et voir? De plus, toute cette expérience serait simplifiée si vous vous débarrassiez du code de réflexion. Faites-nous savoir comment vous allez :) – MickyD

+0

Eh bien, en dehors du sujet ici, mais quand je dérive ma propre classe de TableLayoutPanel, puis l'utiliser sur mon formulaire, je reçois des erreurs avec l'affichage du formulaire. C'est pourquoi j'ai utilisé le code de réflexion. –

+0

@AndrewTruckle Je pense que la réflexion ne fait que masquer les erreurs, sans en attaquer la cause. La propriété 'DoubleBuffered' est protégée, donc lorsque vous dérivez votre classe, vous devriez pouvoir y accéder. – MicroVirus

Répondre

2

De l'Reference Source est ici la mise en œuvre de la DoubleBuffered propriété:

protected virtual bool DoubleBuffered { 
    get { 
     return GetStyle(ControlStyles.OptimizedDoubleBuffer); 
    } 
    set { 
     if (value != DoubleBuffered) { 
      if (value) { 
       SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value); 
      } 
      else { 
       SetStyle(ControlStyles.OptimizedDoubleBuffer, value); 
      } 
     } 
    } 
} 

(Notez que la propriété est héritée, donc vous devez revenir à la classe Control pour le trouver.)