2016-01-06 3 views
2

Хотя этот вопрос является достаточно общим для применения к сети, я заинтересован в WinForms в частности.Переключение управления выравниванием между LTR и языками RTL

Пользовательский интерфейс приложения переключается между LTR и языками RTL без инцидентов. Единственным препятствием является размещение меток, связанных с элементами ввода, такими как текстовые поля.

Слева направо:
Left to Right

Справа налево:
Right to Left

Размещение этикетки на изображение RTL должны также изменить соответствующим образом.

Есть ли обобщенный программный способ достижения этого?

ответ

1

Вариант 1 - Зеркало форма (зеркала Titlebar тоже)

Если оба RightToLeftLayout и RightToLeft свойства истинно, зеркальное отображение будет включена в форме, а также размещение управления и текстовой поток будет справа -оставил. Поэтому установите RightToLeftLayout в true и установите RightToLeft на «да», чтобы иметь полное право на макет.

Этот способ также будет отображаться в строке заголовка формы, а поле управления будет показано слева.

Вариант 2 - Зеркало Панель (не отражает название-бар)

Если вы не хотели бы иметь право на левую панель заголовка и блок управления слева, вы должны создать свое право на левый контейнер и установить в него элементы управления, а затем установить RightToLeftLayout контейнера в true и установить RightToLeft контейнера на «да», чтобы иметь полное право налево в контейнере без изменения макета панели заголовка и блока управления:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
public class ExPanel : Panel 
{ 
    const int WS_EX_LAYOUTRTL = 0x400000; 
    const int WS_EX_NOINHERITLAYOUT = 0x100000; 
    private bool rightToLeftLayout = false; 

    [Localizable(true)] 
    public bool RightToLeftLayout 
    { 
     get { return rightToLeftLayout; } 
     set 
     { 
      if (rightToLeftLayout != value) 
      { 
       rightToLeftLayout = value; 
       this.RecreateHandle(); 
      } 
     } 
    } 
    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams CP; 
      CP = base.CreateParams; 
      if (this.RightToLeftLayout && 
       this.RightToLeft == System.Windows.Forms.RightToLeft.Yes) 
       CP.ExStyle = CP.ExStyle | WS_EX_LAYOUTRTL | WS_EX_NOINHERITLAYOUT; 
      return CP; 
     } 
    } 
} 

Снимок экрана

Скриншот Вариант 1. Посмотрите на кнопку Закрыть на левой стороне заголовка:

enter image description here

Вот скриншот Вариант 2. Посмотрите на кнопку Закрыть в правой части строки заголовка:

enter image description here

+0

Если вы не возражаете, я спрашиваю, что бы вы считаете наиболее подходящим для правильного локализованного программного обеспечения? Я предполагаю, что, поскольку вы иранцы, у вас есть мнение о том, что является нормальным и обычным. Не использует ли операционная система вариант 1 для всех встроенных диалогов? Почему приложение всегда хотело бы сделать что-то другое? –

+0

@CodyGray Если пользователь использует вариант 1 версии справа налево, это абсолютно необходимо. Но для людей, которые используют левую-правую версию ОС с закрывающей кнопкой слева, действительно раздражает. В настоящее время в Иране большинство пользователей используют ОС с настройками в США и обычно предпочитают вариант 2. –

Смежные вопросы