2010-02-09 1 views
3

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

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

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

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

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

ответ

7

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