Form.OnResize срабатывает во время InitializeComponent()
У меня один и тот же код пользовательского интерфейса, работающий на моем компьютере с английским XP и на компьютере с японским XP. По некоторым причинам - поведение отличается между этими двумя машинами:
На японском компьютере событие OnResize запускается во время вызова InitializeComponent (я думаю, что из функции ResumeLayout). На английской машине это не так.
У меня есть метод переопределения OnResize, который изменяет значения моих личных переменных, которые я определил. Поскольку компонент не был полностью загружен (Ctor все еще работает), эти переменные имеют значение null, и я получаю исключение.
Я могу исправить код, проверив, является ли переменная нулевой или нет, но я хотел бы понять, почему она вызывается в первую очередь и почему это происходит только на этой машине.
Во время поиска в сети я обнаружил ту же проблему, которую опубликовал кто-то другой, но без решения ( http://social.msdn.microsoft.com/Forums/en/winforms/thread/95aefae4-45d8-4ac5-a8f2-6e2142dfb631).
1 ответ
Правильное раскрытие информации: я работаю с Хилой, чтобы увидеть код. Причиной такого поведения было свойство элемента управления AutoScaleMode. В базовом классе элемента управления значение этого свойства было AutoScaleMode.Font. Поскольку все наши машины R&D работают с одинаковыми настройками (на английском языке), они вели себя правильно, и ошибки там не было. Переход на японский компьютер означал отличные настройки шрифта от тех, что на английских машинах. Это вызвало проблемы. Поэтому мы изменили значение свойства AutoScaleMode на None, и это решило проблему. Вывод: остерегайтесь свойства AutoScaleMode.