Windows 窗体应用程序的双向支持
您可以使用 Visual Studio 创建支持双向语言(从右到左)(例如阿拉伯语和希伯来语)的基于 Windows 的应用程序。 这包括标准窗体、对话框、MDI 窗体,以及可在这些窗体中使用的所有控件,即 Control 命名空间中的所有对象。
区域性支持
区域性设置和 UI 区域性设置确定应用程序如何处理日期、时间、货币和其他信息。 对于双向语言的区域性与 UI 区域性的支持和对于任何其他语言的相应支持是相同的。 有关更多信息,请参见 全球 Windows 窗体和 Web 窗体的区域性特定类 和 全球 Windows 窗体和 Web 窗体的区域性特定类 和 全球 Windows 窗体和 Web 窗体的区域性特定类 和 全球 Windows 窗体和 Web 窗体的区域性特定类.
RightToLeft 和 RightToLeftLayout 属性
用于派生窗体的基类 Control 包括 RightToLeft 属性,您可以设置该属性以便更改窗体及其控件的读取顺序。 如果设置窗体的 RightToLeft 属性,则窗体上的控件在默认情况下继承该设置。 但是,还可以针对大多数控件单独设置 RightToLeft 属性。 有关更多信息,请参见 如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本 和 如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本 和 如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本 和 如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本 和 如何:为全球化在 Windows 窗体中按从右到左的顺序显示文本.
RightToLeft 属性的效果可能因控件而异。 在某些控件(如 Button、TreeView 和 ToolTip 控件)中,该属性只设置读取顺序。 在其他控件中,RightToLeft 属性既更改读取顺序又更改布局。 这些控件包括 RadioButton、ComboBox 和 CheckBox 控件。 其他控件要求应用 RightToLeftLayout 属性镜像其布局(从右至左)。 有关 RightToLeft 属性和 RightToLeftLayout 属性如何影响各 Windows 窗体控件的详细信息,请参见下表。
控件/组件 |
RightToLeft 属性的效果 |
RightToLeftLayout 属性的效果 |
是否需要镜像? |
---|---|---|---|
设置 RTL 读取顺序。 反转 TextAlign、ImageAlign 和 TextImageRelation。 |
无效 |
否 |
|
复选框在文本的右侧显示 |
无效 |
否 |
|
所有复选框都显示在文本的右侧 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
无效 |
否 |
|
组合框控件中的项右对齐 |
无效 |
否 |
|
使用 RTL 读取顺序右对齐显示 |
无效 |
否 |
|
使用 RTL 读取顺序右对齐显示 |
无效 |
否 |
|
将影响 RTL 读取顺序和控件布局 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
镜像控件 |
是 |
|
左对齐向上和向下按钮 |
无效 |
否 |
|
不支持 |
无效 |
否 |
|
取决于操作系统的语言 |
无效 |
否 |
|
设置 RTL 读取顺序以及反转滚动条 |
镜像窗体 |
是 |
|
标题右对齐显示。 子控件可以继承该属性。 |
在控件内使用 TableLayoutPanel 以支持从右至左的镜像 |
否 |
|
以右对齐的滚动框(滚动块)开始 |
无效 |
否 |
|
没有要求 |
无效 |
否 |
|
右对齐显示。 反转 TextAlign 和 ImageAlign |
无效 |
否 |
|
右对齐显示。 反转 TextAlign 和 ImageAlign |
无效 |
否 |
|
项右对齐 |
无效 |
否 |
|
将读取顺序设置为 RTL;元素左对齐显示 |
镜像控件 |
是 |
|
在运行时(而非设计时)按照 RTL 读取顺序右对齐显示 |
无效 |
否 |
|
从右至左显示文本。 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
镜像控件 |
是 |
|
不支持 |
不支持 |
否 |
|
向上和向下按钮左对齐 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
无效 |
否 |
|
子控件可以继承该属性 |
在控件内使用 TableLayoutPanel 以获得从右至左的支持 |
是 |
|
不支持 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
无效 |
否 |
|
垂直滚动条变成左对齐,水平滚动条从左侧开始 |
无效 |
否 |
|
不支持 |
不支持 |
否 |
|
不受此属性的影响 |
镜像控件 |
是 |
|
单选按钮显示在文本的右侧 |
无效 |
否 |
|
包括文本的控件元素按照 RTL 读取顺序从右向左显示 |
无效 |
否 |
|
没有影响;具体取决于操作系统的语言 |
无效 |
否 |
|
反转布局面板;垂直滚动条出现在左侧;水平滚动条从右侧开始滚动 |
使用 TableLayoutPanel 来镜像子控件的顺序 |
否 |
|
不支持 |
无效 |
否 |
|
不支持;请改用 StatusStrip |
无效;请改用 StatusStrip |
否 |
|
不受此属性的影响 |
镜像控件 |
是 |
|
按照 RTL 读取顺序从右向左显示文本 |
无效 |
否 |
|
没有要求 |
没有要求 |
否 |
|
不受此属性的影响;请改用 ToolStrip |
无效;请改用 ToolStrip |
是 |
|
设置 RTL 读取顺序 |
无效 |
否 |
|
从右侧开始滚动或跟踪;当 Orientation 为垂直时,刻度从右侧开始算起 |
无效 |
否 |
|
仅设置 RTL 读取顺序 |
镜像控件 |
是 |
|
垂直滚动条出现在左侧;水平滚动条的滚动块位于右侧 |
无直接支持;请使用 TableLayoutPanel |
否 |
|
显示在可滚动控件的左侧而非右侧 |
无效 |
否 |
编码
Windows 窗体支持 Unicode,因此,当创建双向应用程序时,您可以包括任意字符集。 但是,并非所有的 Windows 窗体控件在所有平台上都支持 Unicode。 有关更多信息,请参见编码和 Windows 窗体全球化。
GDI+
您可以使用 GDI+ 按照从右向左的读取顺序绘制文本。 用于绘制文本的 DrawString 方法支持 StringFormat 参数,您可以将该参数设置为 StringFormatFlags 枚举的 DirectionRightToLeft 成员以便翻转文本的起点。
通用对话框
诸如“文件”->“打开”对话框之类的系统工具受 Windows 控制。 它们从操作系统继承语言元素。 如果您使用的 Windows 版本具有正确的语言设置,则这些对话框可以与双向语言正确地协作。
同样,消息框贯穿操作系统并支持双向文本。 消息框按钮上的标题基于当前的语言设置。 在默认情况下,消息框不使用从右向左的读取顺序,但是您可以指定一个参数,以便在显示消息框时更改读取顺序。 有关更多信息,请参见 如何:为双向 Windows 窗体创建消息框。
RightToLeft、Scrollbars 和 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 控件。