Поддержка двунаправленного письма для приложений 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.
См. также
.NET Desktop feedback