2010-02-09 17 views
3

J'ai le même code d'interface utilisateur s'exécutant sur ma machine XP anglaise et sur une machine japonaise XP. Pour une raison quelconque - le comportement est différent entre ces deux machines:Form.OnResize déclenché pendant InitializeComponent()

Sur la machine japonaise, l'événement OnResize est déclenché lors de l'appel InitializeComponent (je pense que cela provient de la fonction ResumeLayout). Sur la machine anglaise, ce n'est pas le cas.

J'ai une méthode de substitution de OnResize qui modifie les valeurs de mes variables privées que j'ai définies. Comme le composant n'a pas été entièrement chargé (le Ctor est toujours en cours d'exécution), ces variables sont nulles et j'ai une exception.

Je peux corriger le code en vérifiant si la variable est nulle ou non, mais je voudrais comprendre pourquoi il est appelé en premier lieu et pourquoi il se produit uniquement sur cette machine.

Lors de ma recherche sur le net, j'ai trouvé le même problème que quelqu'un d'autre a posté, mais sans solution (http://social.msdn.microsoft.com/Forums/en/winforms/thread/95aefae4-45d8-4ac5-a8f2-6e2142dfb631).

Répondre

7

Divulgation correcte: Je travaille avec Hila afin que je puisse voir le code. La raison de ce comportement différent était due à la propriété a du contrôle appelée AutoScaleMode. Dans la classe de base du contrôle, la valeur de cette propriété était AutoScaleMode.Font. Puisque toutes nos machines R & D fonctionnent avec les mêmes paramètres (anglais), elles se sont comportées correctement et le bug n'est pas arrivé là. Changer à une machine japonaise signifiait différents paramètres de police de ceux sur les machines anglaises. Cela a causé le problème. Nous avons donc modifié la valeur de la propriété AutoScaleMode à None et résolu le problème. Conclusion: attention à la propriété AutoScaleMode.