Form.OnResize acionado durante InitializeComponent()
-
19-09-2019 - |
Pergunta
Eu tenho o mesmo código de UI em execução na minha máquina XP em inglês e na máquina XP em japonês.Por alguma razão - o comportamento é diferente entre essas duas máquinas:
Na máquina japonesa, o evento OnResize está sendo acionado durante a chamada InitializeComponent (acho que é da função ResumeLayout).Na máquina inglesa isso não acontece.
Eu tenho um método de substituição OnResize que altera os valores das minhas variáveis privadas que defini.Como o componente não foi totalmente carregado (o Ctor ainda está em execução), essas variáveis são nulas e recebo uma exceção.
Posso consertar o código verificando se a variável é nula ou não, mas gostaria de entender por que ela está sendo chamada e por que isso acontece apenas nesta máquina.
Durante minha pesquisa na net encontrei o mesmo problema que outra pessoa postou, mas sem solução (http://social.msdn.microsoft.com/Forums/en/winforms/thread/95aefae4-45d8-4ac5-a8f2-6e2142dfb631).
Solução
Divulgação adequada: Estou trabalhando com Hila, então pude ver o código.O motivo do comportamento diferente foi devido a uma propriedade do controle chamada AutoScaleMode.Na classe base do controle o valor desta propriedade era AutoScaleMode.Font.Como todas as nossas máquinas de P&D estão rodando com as mesmas configurações (inglês), elas se comportaram corretamente e o bug não aconteceu aí.Mudar para uma máquina japonesa significou configurações de fonte diferentes daquelas das máquinas inglesas.Isso causou o problema.Então alteramos o valor da propriedade AutoScaleMode para None e isso resolveu o problema. Conclusão:cuidado com a propriedade AutoScaleMode.