Поделиться через


Поддержка двунаправленного письма для приложений Windows Forms

Visual Studio можно использовать для создания приложений Windows, поддерживающих двунаправленное написание (справа налево), например на арабском языке или иврите. Сюда входят стандартные формы, диалоговые окна, MDI-формы и все элементы управления, с которыми можно работать в этих формах, то есть все объекты в пространстве имен Control.

Поддержка языка и региональных параметров

Язык и региональные параметры, в том числе язык и региональные параметры пользовательского интерфейса, определяют способы обработки приложением дат, времени, валют и других данных. Поддержка языка и региональных параметров, в том числе языка и региональных параметров пользовательского интерфейса, для языков с двунаправленным письмом соответствует поддержке для любых других языков. Дополнительные сведения см. в статье Классы, соответствующие определенному языку и региональным параметрам, для глобальных форм Windows Forms и Web Forms.

Свойства RightToLeft и RightToLeftLayout

Базовый класс Control, от которого наследуются формы, включает свойство RightToLeft, которое можно задать, чтобы изменить порядок чтения формы и ее элементов управления. Если задать свойство RightToLeft формы, по умолчанию элементы управления формы будут наследовать этот параметр. Однако свойство RightToLeft можно также задать по отдельности для большинства элементов управления. См. также Практическое руководство. Отображение текста справа налево в формах Windows Forms с целью глобализации.

Результат применения свойства RightToLeft может отличаться в разных элементах управления. В некоторых элементах управления это свойство устанавливает только порядок чтения, например в элементах управления Button, TreeView и ToolTip. В других элементах управления свойство RightToLeft изменяет порядок чтения и макет. К ним относятся элементы управления RadioButton, ComboBox и CheckBox. Другие элементы управления требуют применения свойства RightToLeftLayout для зеркального отражения расположения справа налево. В следующей таблице приведены сведения о том, как свойства RightToLeft и RightToLeftLayout влияют на отдельные элементы управления Windows Forms.

Элемент управления или компонент Влияние свойства RightToLeft Влияние свойства RightToLeftLayout Требуется ли отражение
Button Задает порядок чтения справа налево. Обращает значения TextAlign, ImageAlign и TextImageRelation. Не влияет Нет
CheckBox Флажок отображается справа от текста. Не влияет Нет
CheckedListBox Все флажки отображаются справа от текста. Не влияет Нет
ColorDialog Не меняется; зависит от языка операционной системы. Не влияет Нет
ComboBox Элементы в поле со списком выравниваются по правому краю. Не влияет Нет
ContextMenu Отображается по правому краю с порядком чтения справа налево. Не влияет Нет
DataGrid Отображается по правому краю с порядком чтения справа налево. Не влияет Нет
DataGridView Влияет на расположение элемента управления и порядок чтения справа налево. Не влияет Нет
DateTimePicker Не меняется; зависит от языка операционной системы. Зеркально отражает элемент управления. Да
DomainUpDown Выравнивание кнопок "вверх" и "вниз" по левому краю. Не влияет Нет
ErrorProvider Не поддерживается Не влияет Нет
FontDialog Зависит от языка операционной системы. Не влияет Нет
Form Задает порядок чтения справа налево и обращает полосы прокрутки. Зеркально отражает форму. Да
GroupBox Подпись отображается по правому краю. Дочерние элементы управления могут наследовать это свойство. Используйте TableLayoutPanel в элементе управления для поддержки зеркального отображения справа налево. Нет
HScrollBar Запускается с полосой прокрутки (бегунком) по правому краю. Не влияет Нет
ImageList Необязательное Не влияет Нет
Label Отображение по правому краю. Обращает значения TextAlign и ImageAlign. Не влияет Нет
LinkLabel Отображение по правому краю. Обращает значения TextAlign и ImageAlign. Не влияет Нет
ListBox Элементы выравниваются по правому краю. Не влияет Нет
ListView Устанавливает порядок чтения справа налево; элементы остаются выровненными по левому краю. Зеркально отражает элемент управления. Да
MainMenu Отображение по правому краю с порядком чтения справа налево во время выполнения (не во время разработки). Не влияет Нет
MaskedTextBox Отображение текста справа налево. Не влияет Нет
MonthCalendar Не меняется; зависит от языка операционной системы. Зеркально отражает элемент управления. Да
NotifyIcon Не поддерживается Не поддерживается Нет
NumericUpDown Выравнивание кнопок "вверх" и "вниз" по левому краю. Не влияет Нет
OpenFileDialog В операционных системах с написанием справа налево при задании для свойства формы RightToLeft значения RightToLeft.Yes происходит локализации диалогового окна Не влияет Нет
PageSetupDialog Не меняется; зависит от языка операционной системы. Не влияет Нет
Panel Дочерние элементы управления могут наследовать это свойство. Используйте TableLayoutPanel в элементе управления для поддержки отображения справа налево. Да
PictureBox Не поддерживается Не влияет Нет
PrintDialog Не меняется; зависит от языка операционной системы. Не влияет Нет
PrintDocument Вертикальная полоса прокрутки располагается по левому краю, а горизонтальная полоса прокрутки начинается слева. Не влияет Нет
PrintPreviewDialog Не поддерживается Не поддерживается Нет
ProgressBar Не изменяется этим свойством. Зеркально отражает элемент управления. Да
RadioButton Переключатель отображается справа от текста. Не влияет Нет
RichTextBox Элементы управления, содержащие текст, отображаются справа налево с порядком чтения справа налево. Не влияет Нет
SaveFileDialog Не меняется; зависит от языка операционной системы. Не влияет Нет
SplitContainer Макет панели обращается; вертикальная полоса прокрутки отображается слева; горизонтальная полоса прокрутки начинается справа. Используйте TableLayoutPanel, чтобы отразить порядок чтения дочерних элементов управления. Нет
Splitter Не поддерживается Не влияет Нет
StatusBar Не поддерживается; используйте StatusStrip. Не влияет; используйте StatusStrip. Нет
TabControl Не изменяется этим свойством. Зеркально отражает элемент управления. Да
TextBox Отображение текста справа налево с порядком чтения справа налево. Не влияет Нет
Timer Необязательное Необязательное Нет
ToolBar Не изменяется этим свойством; используйте ToolStrip. Не влияет; используйте ToolStrip. Да
ToolTip Задает порядок чтения справа налево. Не влияет Нет
TrackBar Прокрутка или линейка начинается справа; если ориентация Orientation вертикальная, деления начинаются справа. Не влияет Нет
TreeView Задает только порядок чтения справа налево. Зеркально отражает элемент управления. Да
UserControl Вертикальная полоса прокрутки отображается слева; бегунок горизонтальной полосы прокрутки находится справа. Прямая поддержка отсутствует; используйте TableLayoutPanel. Нет
VScrollBar Отображается не в правой, а в левой части элементов управления с прокруткой. Не влияет Нет

Кодировка

Windows Forms поддерживает Юникод, поэтому можно включить любой набор символов при создании приложений с двунаправленным письмом. Однако не все элементы управления Windows Forms поддерживают Юникод во всех платформах.

GDI+

GDI+ можно использовать для отрисовки текста с написанием справа налево. Метод DrawString, используемый для отрисовки текста, поддерживает параметр StringFormat, который можно задать для члена DirectionRightToLeft перечисления StringFormatFlags, чтобы обратить точку начала координат для текста.

Общие диалоговые окна

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

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

RightToLeft, полосы прокрутки и ScrollableControl

В настоящее время существует ограничение в Windows Forms, которое блокирует правильную работу всех классов, производных от ScrollableControl, когда включено свойство RightToLeft и для AutoScroll задано значение Yes. Предположим, что вы поместили элемент управления, например Panel, или класс контейнера, производный от Panel (такой как FlowLayoutPanel или TableLayoutPanel), в форму. Если задать значение Yes свойства AutoScroll для контейнера, а затем значение Right свойства Anchor для одного или нескольких элементов управления внутри контейнера, то полоса прокрутки не появится вовсе. Класс, производный от ScrollableControl, действует, как если бы свойству AutoScroll было присвоено значение No.

В настоящее время единственным решением является вложение ScrollableControl в другой ScrollableControl. Например, если требуется, чтобы класс TableLayoutPanel работал в такой ситуации, можно поместить его в элемент управления Panel и задать для свойства AutoScroll в элементе Panel значение Yes.

Зеркальное отображение

Зеркальным отображением называется обращение размещения элементов пользовательского интерфейса так, чтобы они следовали справа налево. Например, в зеркальной форме Windows Forms кнопки "Свернуть", "Развернуть" и "Закрыть" отображаются в левом, а не в правом углу заголовка окна.

Задание для свойства RightToLeft формы или элемента управления значения true обращает порядок чтения элементов в форме, но не обращает макет для отображения справа налево, то есть не приводит к зеркальному отображению. Например, задание этого свойства не перемещает кнопки Свернуть, Развернуть и Закрыть в заголовке окна в левую часть формы. Аналогично, некоторые элементы управления, такие как TreeView, требуют зеркального отображения для соответствия арабскому языку или ивриту. Отразить эти элементы управления можно, задав свойство RightToLeftLayout.

Можно создать отраженные версии следующих элементов управления:

Некоторые элементы управления запечатаны. Как следствие, из них нельзя наследовать новый элемент управления. К ним относятся элементы управления ImageList и ProgressBar.

См. также