Form.OnResize срабатывает во время InitializeComponent () - PullRequest
3 голосов
/ 09 февраля 2010

У меня один и тот же код пользовательского интерфейса, работающий на моем компьютере с английским XP и на компьютере с японским XP По некоторым причинам - поведение этих двух машин отличается:

На японском компьютере событие OnResize запускается во время вызова InitializeComponent (я думаю, что из функции ResumeLayout). На английской машине это не так.

У меня есть метод переопределения OnResize, который изменяет значения моих личных переменных, которые я определил. Поскольку компонент не был полностью загружен (Ctor все еще работает), эти переменные имеют значение null, и я получаю исключение.

Я могу исправить код, проверив, является ли переменная нулевой или нет, но я хотел бы понять, почему она вызывается в первую очередь и почему это происходит только на этой машине.

Во время поиска в сети я обнаружил ту же проблему, что и кто-то другой, но без решения (http://social.msdn.microsoft.com/Forums/en/winforms/thread/95aefae4-45d8-4ac5-a8f2-6e2142dfb631).

)

1 Ответ

7 голосов
/ 09 февраля 2010

Правильное раскрытие: Я работаю с Хилой, поэтому мне удалось увидеть код. Причиной такого поведения было свойство элемента управления AutoScaleMode. В базовом классе элемента управления значение этого свойства было AutoScaleMode.Font. Поскольку все наши машины R & D работают с одинаковыми настройками (на английском языке), они вели себя правильно, и ошибки там не было. Переход на японский компьютер означал отличные настройки шрифта от тех, что на английских машинах. Это вызвало проблемы. Поэтому мы изменили значение свойства AutoScaleMode на None, и это решило проблему. Заключение : остерегайтесь свойства AutoScaleMode.

...