Положение WinForms Control на упрощенном китайском - PullRequest
1 голос
/ 07 июля 2010

У нас есть приложение WinForms, которое включает в себя элементы управления, такие как графические блоки, расположенные на форме. Базовое приложение на английском языке.

Мы перевели это приложение на несколько разных языков (французский, испанский, датский, греческий и т. Д.), А совсем недавно - на упрощенный китайский. Переведенное приложение отлично работает на наших операционных системах (английский).

Один из наших клиентов установил приложение в своей операционной системе Windows XP на упрощенном китайском. Макет нашего приложения не работает. Проще говоря, элементы выталкиваются в нижний правый угол с коэффициентом, пропорциональным расстоянию между элементом и верхним левым углом. Например, элемент в верхнем правом углу в режиме конструктора перемещается за пределы экрана вправо, тогда как элементы внизу страницы перемещаются вниз и вправо.

Приложение поддерживает переключение языков во время использования. Если локаль en-US, проблем с макетом нет. При переключении на упрощенный китайский проблема возникает, но только в операционной системе упрощенного китайского языка. Разрешение экрана и DPI одинаковы.

У вас есть идеи? Я уверен, что где-то должен быть простой параметр конфигурации, но я не смог решить эту проблему.

1 Ответ

1 голос
/ 07 июля 2010

Размер системного базового шрифта также имеет значение.Что действительно можно изменить в XP.Это вызовет логику автоматического масштабирования формы, разработанную для обеспечения увеличения элементов управления в соответствии с большим размером шрифта.

Это по своему замыслу контролируется свойством формы AutoScaleMode.Не меняйте его, масштабирование важно.Просто убедитесь, что макет формы все еще выглядит хорошо, используйте свойства, такие как Anchor и Dock, элементы управления, такие как TableLayoutPanel, FlowLayoutPanel.Или событие Resize для хитрых.

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

    protected override void OnLoad(EventArgs e) {
        this.Font = new Font(this.Font.FontFamily, this.Font.SizeInPoints * 125 / 96);
    }
...