Windows 窗体应用程序的双向支持
可使用 Visual Studio 创建基于 Windows 且支持阿拉伯语和希伯来语等双向(从右到左)语言的应用程序。 这包括标准窗体、对话框、MDI 窗体以及可在这些窗体中使用的所有控件 — 即,Control 命名空间中的所有对象。
区域性支持
区域性和 UI 区域性设置确定应用程序如何使用日期、时间、货币和其他信息。 区域性和 UI 区域性对双向语言的支持与对其他所有语言的支持相同。 有关详细信息,请参阅全球 Windows 窗体和 Web 窗体的区域性特定类。
RightToLeft 和 RightToLeftLayout 属性
可派生设备的 Control 基类包含可设置用于更改窗体及其控件阅读顺序的 RightToLeft 属性。 如果设置窗体的 RightToLeft 属性,则默认情况下窗体上的控件将继承此设置。 但是,也可在大多数控件上单独设置 RightToLeft 属性。 另请参阅如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本。
RightToLeft 属性对不同控件的影响可能各有不同。 在某些控件中此属性只设置阅读顺序,如 Button、TreeView 和 ToolTip 控件。 在其他控件中,RightToLeft 属性同时更改阅读顺序和布局。 这包括 RadioButton、ComboBox 和 CheckBox 控件。 其他控件要求将 RightToLeftLayout 属性用于从右到左镜像其布局。 下表提供了有关 RightToLeft 和 RightToLeftLayout 属性如何影响单个 Windows 窗体控件的详细信息。
控件/组件 | RightToLeft 属性的效果 | RightToLeftLayout 属性的效果 | 是否需要镜像? |
---|---|---|---|
Button | 设置 RTL 阅读顺序。 反转 TextAlign、ImageAlign 和 TextImageRelation | 无影响 | 否 |
CheckBox | 复选框显示在文本右侧 | 无影响 | 否 |
CheckedListBox | 所有复选框均显示在文本右侧 | 无影响 | 否 |
ColorDialog | 无影响;取决于操作系统的语言 | 无影响 | 否 |
ComboBox | 组合框控件中的项呈右对齐 | 无影响 | 否 |
ContextMenu | 使用 RTL 阅读顺序呈右对齐显示 | 无影响 | 否 |
DataGrid | 使用 RTL 阅读顺序呈右对齐显示 | 无影响 | 否 |
DataGridView | 同时影响 RTL 阅读顺序和控件布局 | 无影响 | 否 |
DateTimePicker | 无影响;取决于操作系统的语言 | 镜像控件 | 是 |
DomainUpDown | 左对齐向上和向下按钮 | 无影响 | 否 |
ErrorProvider | 不支持 | 无影响 | 否 |
FontDialog | 取决于操作系统的语言 | 无影响 | 否 |
Form | 设置 RTL 阅读顺序,并反转滚动条 | 镜像窗体 | 是 |
GroupBox | 右对齐显示标题。 子控件可能继承此属性。 | 在控件内使用 TableLayoutPanel 以获取从右到左的镜像支持 | 否 |
HScrollBar | 从滚动框(缩略图)右对齐开始 | 无影响 | 否 |
ImageList | 不是必需 | 无影响 | 否 |
Label | 右对齐显示。 反转 TextAlign 和 ImageAlign | 无影响 | 否 |
LinkLabel | 右对齐显示。 反转 TextAlign 和 ImageAlign | 无影响 | 否 |
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 的一个容器类(如 FlowLayoutPanel 或 TableLayoutPanel)。 如果将容器上的 AutoScroll 设置为 Yes,然后将容器内一个或多个控件的 Anchor 属性设置为 Right,则不会出现任何滚动条。 派生自 ScrollableControl 的类的运行方式与将 AutoScroll 设置为 No 时相同。
目前,唯一的解决方法是将 ScrollableControl 嵌套到其他 ScrollableControl 内。 例如,如果需要在此情况下运行 TableLayoutPanel,可以将它置于 Panel 控件中并将 Panel 上的 AutoScroll 设置为 Yes。
镜像
镜像是指反转 UI 元素布局,使其从右到左排列。 例如,在镜像的 Windows 窗体中,“最小化”、“最大化”和“关闭”按钮均显示在标题栏的最左侧,而不是最右侧。
将窗体或控件的 RightToLeft 属性设置为 true
可反转窗体上元素的阅读顺序,但此设置不会将布局反转为从右到左显示 — 也就是说,它不会导致镜像。 例如,设置此属性不会将窗体标题栏中的“最小化”、“最大化”和“关闭”按钮移动到窗体左侧。 同样,某些控件(如 TreeView 控件)需要镜像来更改显示方式,以便适合于阿拉伯语或希伯来语。 可通过设置 RightToLeftLayout 属性镜像这些控件。
可创建以下控件的镜像版本:
已封装某些控件。 因此,它们无法派生出新控件。 这些包括 ImageList 和 ProgressBar 控件。