C#: o resumeLayout (true) faz o mesmo que resumeLayout (false) + performayout ()?
-
20-09-2019 - |
Pergunta
Eu olhei para o código de designer gerado de Form
areia UserControl
s, e no InitializeComponent()
método que eles sempre começam
this.SuspendLayout();
e terminar com
this.ResumeLayout(false);
this.PerformLayout();
Mas pelo que posso ver na documentação do MSDN desses métodos, não terminaria com
this.ResumeLayout(true); // Or just this.ResumeLayout()
Faz exatamente a mesma coisa? Ou estou perdendo alguma coisa aqui?
Perguntando porque adicionarei um monte de controles em um método diferente e pensei que deveria fazer a rotina de suspensão de resumo para ser agradável e eficiente. Mas não consigo descobrir qual é o motivo dessas duas chamadas de método quando você pode aparentemente usar apenas um ...
Solução
Usando refletor:
this.ResumeLayout() is equal to this.ResumeLayout(true)
Mas
this.ResumeLayout(true) is not equal to this.ResumeLayout(false) + this.PerformLayout()
Razão:
Quando o resumeLayout é chamado com False, há uma coleção de controle que é percorrida e as chamadas de layoutEngine initlayout em cada um dos controles no layout.
Outras dicas
SussendLayout
Ao adicionar vários controles ao controle dos pais, é recomendável que você chame o método SussendLayout antes de inicializar os controles a serem adicionados. Depois de adicionar os controles ao controle dos pais, ligue para o método resumelayout. Isso aumentará o desempenho dos aplicativos com muitos controles.
PerformLayout
Força o controle a aplicar a lógica de layout a todos os seus controles infantis. Se o SussendLayout o método foi chamado antes de ligar para o PerformLayouT método, o Layout evento é suprimido. o layout O evento pode ser suprimido usando os métodos SussendLayout e RemumElayout.
Link msdn - Método de performayout