C #: ¿Tiene ResumeLayout (verdadero) hacer lo mismo que ResumeLayout (falso) + PerformLayout ()?
-
20-09-2019 - |
Pregunta
He mirado el código generado diseñador de Form
s y UserControl
s, y en el método InitializeComponent()
que siempre comienzan con
this.SuspendLayout();
y terminar con
this.ResumeLayout(false);
this.PerformLayout();
Pero por lo que puedo ver en la documentación de MSDN de esos métodos, no se termina con
this.ResumeLayout(true); // Or just this.ResumeLayout()
hacer exactamente lo mismo? O me estoy perdiendo algo aquí?
pregunto porque voy a añadir un montón de controles en un método diferente, y pensé que debería hacer la rutina de suspender reanudación de ser agradable y eficiente. Pero no se puede averiguar cuál es la razón para esas dos llamadas a métodos son cuando puede parecer sólo tiene que utilizar uno ...
Solución
El uso del reflector:
this.ResumeLayout() is equal to this.ResumeLayout(true)
Pero
this.ResumeLayout(true) is not equal to this.ResumeLayout(false) + this.PerformLayout()
Motivo:
Cuando se llama ResumeLayout con datos falsos, hay una colección de controles que es devuelto a través y la LayoutEngine llama InitLayout en cada uno de los controles en el diseño.
Otros consejos
SuspendLayout
Cuando la adición de varios controles a una el control de los padres, se recomienda que se llama al método SuspendLayout antes de inicializar los controles que deben adicional. Después de la adición de los controles para el control de los padres, llame al método ResumeLayout. Esta voluntad aumentar el rendimiento de aplicaciones con muchos controles.
PerformLayout
Obliga al control a aplicar la disposición lógica para todos sus controles secundarios. Si la método SuspendLayout era llamada antes de llamar al PerformLayou método t, la Layout evento se suprime. La layout evento puede ser suprimida utilizando la SuspendLayout y métodos ResumeLayout.
MSDN Enlace - PerformLayout Método