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 属性的效果可能因控件而异。 在某些控件(如 ButtonTreeViewToolTip 控件)中,该属性只设置读取顺序。 在其他控件中,RightToLeft 属性既更改读取顺序又更改布局。 这些控件包括 RadioButtonComboBoxCheckBox 控件。 其他控件要求应用 RightToLeftLayout 属性镜像其布局(从右至左)。 有关 RightToLeft 属性和 RightToLeftLayout 属性如何影响各 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

没有影响;具体取决于操作系统的语言

无效

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。 有关更多信息,请参见编码和 Windows 窗体全球化

GDI+

您可以使用 GDI+ 按照从右向左的读取顺序绘制文本。 用于绘制文本的 DrawString 方法支持 StringFormat 参数,您可以将该参数设置为 StringFormatFlags 枚举的 DirectionRightToLeft 成员以便翻转文本的起点。

通用对话框

诸如“文件”->“打开”对话框之类的系统工具受 Windows 控制。 它们从操作系统继承语言元素。 如果您使用的 Windows 版本具有正确的语言设置,则这些对话框可以与双向语言正确地协作。

同样,消息框贯穿操作系统并支持双向文本。 消息框按钮上的标题基于当前的语言设置。 在默认情况下,消息框不使用从右向左的读取顺序,但是您可以指定一个参数,以便在显示消息框时更改读取顺序。 有关更多信息,请参见 如何:为双向 Windows 窗体创建消息框

RightToLeft、Scrollbars 和 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 控件。

请参见

概念

ASP.NET Web 应用程序的双向支持

其他资源

全球化 Windows 窗体