Bi-Directional 对 Windows 窗体应用程序的支持

可以使用 Visual Studio 创建支持双向(从右到左)语言(如阿拉伯语和希伯来语)的基于 Windows 的应用程序。 这包括标准窗体、对话框、MDI 窗体以及可在这些窗体中处理的所有控件,即命名空间中的所有 Control 对象。

文化支持

文化和用户界面文化设置决定应用程序如何与日期、时间、货币及其他信息交互。 对双向语言的文化和UI文化支持与对其他语言的支持完全相同。 有关详细信息,请参阅 全球 Windows 窗体和 Web 窗体的文化特定类

RightToLeft 和 RightToLeftLayout 属性

从中派生窗体的基 Control 类包括一个 RightToLeft 属性,你可以将其设置为更改窗体及其控件的阅读顺序。 如果设置窗体 RightToLeft 的属性,则默认情况下窗体上的控件将继承此设置。 但是,还可以在大多数控件上单独设置 RightToLeft 属性。 另请参阅 “如何:在 Windows 窗体中显示从右到左文本以实现全球化”

属性的效果 RightToLeft 可能因控件而不同。 在某些控件中,该属性仅设置读取顺序,如ButtonTreeViewToolTip控件。 在其他控件中,属性 RightToLeft 更改读取顺序和布局。 这包括控件RadioButtonComboBoxCheckBox控件。 其他控件要求应用 RightToLeftLayout 该属性以从右向左镜像其布局。 下表详细介绍了这些 RightToLeft 控件和 RightToLeftLayout 属性如何影响各个 Windows 窗体控件。

控制/组件 RightToLeft 属性的效果 RightToLeftLayout 属性的效果 需要镜像?
Button 设置 RTL 读取顺序。 反向TextAlignImageAlignTextImageRelation 无影响
CheckBox 复选框显示在文本右侧 无影响
CheckedListBox 所有复选框都显示在文本右侧 无影响
ColorDialog 不受影响;取决于操作系统的语言 无影响
ComboBox 组合框控件中的项目右对齐 无影响
ContextMenu 显示为与 RTL 阅读顺序右对齐 无影响
DataGrid 以从右到左的阅读顺序右对齐显示 无影响
DataGridView 影响 RTL 读取顺序和控件布局 无影响
DateTimePicker 操作系统的语言不受影响。这取决于具体的操作系统语言。 镜像控件 是的
DomainUpDown 将向上和向下按钮左对齐 无影响
ErrorProvider 不支持 无影响
FontDialog 取决于操作系统的语言 无影响
Form 设置 RTL 阅读顺序,并反转滚动条 反映形式 是的
GroupBox 字幕右对齐。 子控件可以继承此属性。 在控件内使用TableLayoutPanel支持从右向左的镜像效果
HScrollBar 从滚动框(拇指)右对齐开始 无影响
ImageList 不是必需 无影响
Label 显示右对齐。 反转TextAlignImageAlign 无影响
LinkLabel 显示右对齐。 反转TextAlignImageAlign 无影响
ListBox 项目右对齐 无影响
ListView 将读取顺序设置为 RTL;元素保持左对齐 映射控件 是的
MainMenu 在运行时刻,显示为与 RTL 阅读顺序右对齐(在设计时刻则不是) 无影响
MaskedTextBox 显示从右到左的文本。 无影响
MonthCalendar 不受影响;取决于操作系统的语言 镜像控件 是的
NotifyIcon 不支持 不支持
NumericUpDown 向上按钮和向下按钮左对齐。 无影响
OpenFileDialog 在从右到左的操作系统上,将包含窗体的 RightToLeft 属性设置为 RightToLeft.Yes 以实现对话框的本地化。 无影响
PageSetupDialog 不受影响,取决于操作系统的语言 无影响
Panel 子控件可以继承此属性 在控件中使用 TableLayoutPanel 以支持从右向左的布局 是的
PictureBox 不支持 无影响
PrintDialog 不受影响,取决于操作系统的语言 无影响
PrintDocument 垂直滚动条变为左对齐,水平滚动条从左侧开始 无影响
PrintPreviewDialog 不支持 不支持
ProgressBar 不受此属性影响 镜像控件 是的
RadioButton 单选按钮显示在文本右侧 无影响
RichTextBox 包含文本的控件元素以 RTL 阅读顺序从右向左显示 无影响
SaveFileDialog 不受影响;依赖于操作系统的语言 无影响
SplitContainer 面板布局反转;垂直滚动条显示在左侧;水平滚动条从右侧开始 采用一个 TableLayoutPanel 来对应子控件的顺序
Splitter 不支持 无影响
StatusBar 不支持;请改用StatusStrip 无效果;请改用StatusStrip
TabControl 不受此属性影响 镜像控件 是的
TextBox 使用 RTL 阅读顺序显示从右到左的文本 无影响
Timer 不是必需 不是必需
ToolBar 不受此属性影响;请改用ToolStrip 无效果;请改用ToolStrip 是的
ToolTip 设置 RTL 读取顺序 无影响
TrackBar 滚动条或轨道从右侧开始;当 Orientation 为垂直时,刻度从右侧开始出现。 无影响
TreeView 仅设置 RTL 阅读顺序 镜像控件 是的
UserControl 垂直滚动条显示在左侧;水平滚动条右侧有拇指 无直接支持; 使用 TableLayoutPanel
VScrollBar 显示在左侧而不是可滚动控件的右侧 无影响

编码

Windows 窗体支持 Unicode,因此可以在创建双向应用程序时包含任何字符集。 但是,并非所有 Windows 窗体控件都支持所有平台上的 Unicode。

GDI+

可以使用 GDI+ 通过从右到左的阅读顺序绘制文本。 用于绘制文本的DrawString方法支持一个StringFormat参数,你可以将其设置为StringFormatFlags枚举的DirectionRightToLeft成员,以反转文本的原点。

常见对话框

“文件打开”对话框等系统工具位于 Windows 的控制之下。 这些组件继承了操作系统的语言元素。 如果使用具有正确语言设置的 Windows 版本,这些对话框将正确使用双向语言。

同样,消息框通过操作系统并支持双向文本。 消息框按钮上的标题基于当前语言设置。 默认情况下,消息框不使用从右到左的阅读顺序,但可以指定参数,以便在显示消息框时更改阅读顺序。

RightToLeft、Scrollbars 和 ScrollableControl

Windows 窗体中当前存在一个限制,当同时启用RightToLeft并将AutoScroll设置为Yes时,所有派生自ScrollableControl的类无法正常运行。 例如,假设您在窗体上放置一个控件,例如 Panel,或者一个从 Panel 派生的容器类(如 FlowLayoutPanelTableLayoutPanel)。 如果将容器Yes设置为AutoScroll,然后将容器内一个或多个控件的属性设置为AnchorRight,则不会显示任何滚动条。 派生自 ScrollableControl 的类表现得就像 AutoScroll 被设置为 No

目前,唯一的解决方法是嵌套 ScrollableControl 在另一个 ScrollableControl内部。 例如,如果需要 TableLayoutPanel 在这种情况下工作,您可以将它放置在 Panel 控件中,并将 Panel 设置为 AutoScrollYes

镜像

镜像 是指反转 UI 元素的布局,以便它们从右向左流动。 例如,在镜像的 Windows 窗体中,最小化、最大化和关闭按钮显示在标题栏上最左侧,而不是最右侧。

将窗体或控件 RightToLeft 的属性设置为 true 反转窗体上的元素的读取顺序,但此设置不会将布局反转为从右向左- 也就是说,它不会导致镜像。 例如,设置此属性不会将窗体标题栏中的 最小化最大化关闭 按钮移动到窗体左侧。 同样,某些控件(如 TreeView 控件)需要镜像才能更改其显示以适应阿拉伯语或希伯来语。 可以通过设置 RightToLeftLayout 属性来镜像这些控件。

可以创建以下控件的镜像版本:

某些控件是密封的。 因此,无法从中派生新控件。 这些包括ImageListProgressBar控件。

另请参阅