Позиция управления WinForms на упрощенном китайском языке

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

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

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

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

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


person Jason Kealey    schedule 07.07.2010    source источник


Ответы (1)


Размер системного базового шрифта также имеет значение. Это действительно то, что вы можете изменить в 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);
    }
person Hans Passant    schedule 07.07.2010
comment
У меня нет другого выбора, кроме как полностью спроектировать расположение элементов, чтобы оно автоматически изменяло размер окна, даже если у меня фиксированный размер окна? Я предполагаю, что код, который вы вставляете, должен выполняться только тогда, когда семейство шрифтов по умолчанию нестандартно? Влияет ли шрифт на поля с картинками? Я ожидал этого от зон текста, но не графических элементов. - person Jason Kealey; 07.07.2010
comment
Если я правильно понимаю, отключение AutoScaleMode было бы простым обходным решением, которое сделало бы его одинаковым везде, но я потерял бы функции, когда пользователи программного обеспечения имеют слабое зрение? (проблема доступности?) - person Jason Kealey; 07.07.2010
comment
Отключить не вариант. Текст внутри элементов управления будет обрезан, поскольку элемент управления недостаточно велик. Делает китайские иероглифы нечитаемыми. - person Hans Passant; 07.07.2010
comment
Мне любопытно узнать, почему китайские иероглифы подходят для американской версии Windows, но не для китайской? Что заставляет этот размер шрифта отличаться от того, что определено в файле RESX? - person Jason Kealey; 07.07.2010
comment
Я уже говорил вам, что это системная настройка XP. Опция скрыта где-то в апплете «Панель управления + дисплей». Не близко к машине XP прямо сейчас. - person Hans Passant; 07.07.2010
comment
Спасибо - поищу его снова, чтобы проверить поведение. - person Jason Kealey; 07.07.2010