Windows 窗体应用程序的双向支持

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

区域性支持

区域性和 UI 区域性设置确定应用程序如何使用日期、时间、货币和其他信息。 区域性和 UI 区域性对双向语言的支持与对其他所有语言的支持相同。 有关详细信息,请参阅全球 Windows 窗体和 Web 窗体的区域性特定类

RightToLeft 和 RightToLeftLayout 属性

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

RightToLeft 属性对不同控件的影响可能各有不同。 在某些控件中此属性只设置阅读顺序,如 ButtonTreeViewToolTip 控件。 在其他控件中,RightToLeft 属性同时更改阅读顺序和布局。 这包括 RadioButtonComboBoxCheckBox 控件。 其他控件要求将 RightToLeftLayout 属性用于从右到左镜像其布局。 下表提供了有关 RightToLeftRightToLeftLayout 属性如何影响单个 Windows 窗体控件的详细信息。

控件/组件 RightToLeft 属性的效果 RightToLeftLayout 属性的效果 是否需要镜像?
Button 设置 RTL 阅读顺序。 反转 TextAlignImageAlignTextImageRelation 无影响
CheckBox 复选框显示在文本右侧 无影响
CheckedListBox 所有复选框均显示在文本右侧 无影响
ColorDialog 无影响;取决于操作系统的语言 无影响
ComboBox 组合框控件中的项呈右对齐 无影响
ContextMenu 使用 RTL 阅读顺序呈右对齐显示 无影响
DataGrid 使用 RTL 阅读顺序呈右对齐显示 无影响
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、滚动条和 ScrollableControl

目前 Windows 窗受到如下限制:当 RightToLeft 启用且 AutoScroll设置为 Yes 时,系统将阻止所有派生自 ScrollableControl 的类正常运行。 例如,假设在窗体上放置了一个控件(如 Panel)或派生自 Panel 的一个容器类(如 FlowLayoutPanelTableLayoutPanel)。 如果将容器上的 AutoScroll 设置为 Yes,然后将容器内一个或多个控件的 Anchor 属性设置为 Right,则不会出现任何滚动条。 派生自 ScrollableControl 的类的运行方式与将 AutoScroll 设置为 No 时相同。

目前,唯一的解决方法是将 ScrollableControl 嵌套到其他 ScrollableControl 内。 例如,如果需要在此情况下运行 TableLayoutPanel,可以将它置于 Panel 控件中并将 Panel 上的 AutoScroll 设置为 Yes

镜像

镜像是指反转 UI 元素布局,使其从右到左排列。 例如,在镜像的 Windows 窗体中,“最小化”、“最大化”和“关闭”按钮均显示在标题栏的最左侧,而不是最右侧。

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

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

已封装某些控件。 因此,它们无法派生出新控件。 这些包括 ImageListProgressBar 控件。

另请参阅