對 Windows Forms 應用程式的雙向支援

您可以使用 Visual Studio 來建立支援雙向 (由右至左) 語言的 Windows 應用程式,例如阿拉伯文和希伯來文。 這包括標準表單、對話方塊、MDI 表單,以及您可以在這些表單中使用的所有控制項,也就是 Control 命名空間中的所有物件。

文化特性支援

文化特性和 UI 文化特性設定可決定應用程式如何使用日期、時間、貨幣和其他資訊。 對文化特性和 UI 文化特性的支援同樣適用於雙向語言,因為其適用於任何其他語言。 如需詳細資訊,請參閱 全域 Windows 表單和 Web 表單的文化特性特定類別

RightToLeft 和 RightToLeftLayout 屬性

基底 Control 類別 (表單的衍生來源) 包含 RightToLeft 屬性,您可以將其設定,以變更表單及其控制項的讀取順序。 如果您設定表單的 RightToLeft 屬性,根據預設,表單上的控制項會繼承此設定。 不過,在大部分控制項上,也都可以個別設定 RightToLeft 屬性。 另請參閱如何:針對全球化在 Windows Forms 中由右至左顯示文字

每個控制項的 RightToLeft 屬性效果各不相同。 在某些控制項中,此屬性只會設定讀取順序,例如在 ButtonTreeViewToolTip 控制項中。 在其他控制項中,RightToLeft 屬性則可變更讀取順序和配置。 其中包括 RadioButtonComboBoxCheckBox 控制項。 其他控制項需要套用 RightToLeftLayout 屬性,以將其配置由右至左鏡像處理。 下表詳細說明 RightToLeftRightToLeftLayout 屬性如何影響個別的 Windows Form 控制項。

控制項/元件 RightToLeft 屬性的效果 RightToLeftLayout 屬性的效果 需要鏡像處理嗎?
Button 設定 RTL (由右至左) 讀取順序。 反轉 TextAlignImageAlignTextImageRelation 無效果 No
CheckBox 核取方塊顯示在文字右側 無效果 No
CheckedListBox 所有核取方塊都顯示在文字右側 無效果 No
ColorDialog 不受影響;視作業系統的語言而定 無效果 No
ComboBox 下拉式方塊控制項中的項目靠右對齊 無效果 No
ContextMenu 靠右對齊顯示,且讀取順序為 RTL (由右至左) 無效果 No
DataGrid 靠右對齊顯示,且讀取順序為 RTL (由右至左) 無效果 No
DataGridView 會影響 RTL (由右至左) 讀取順序和控制項配置 無效果 No
DateTimePicker 不受影響;視作業系統的語言而定 將控制項鏡像處理 Yes
DomainUpDown 將向上和向下按鈕靠左對齊 無效果 No
ErrorProvider 不支援 無效果 No
FontDialog 視作業系統的語言而定 無效果 No
Form 設定 RTL (由右至左) 讀取順序,並將捲軸反轉 鏡像處理表單 Yes
GroupBox 標題靠右對齊顯示。 子控制項可能會繼承這個屬性。 在控制項中使用 TableLayoutPanel,以提供由右至左鏡像支援。 No
HScrollBar 開頭為靠右對齊的捲動方塊 無效果 No
ImageList 非必要 無效果 No
Label 靠右對齊顯示。 反轉 TextAlignImageAlign 無效果 No
LinkLabel 靠右對齊顯示。 反轉 TextAlignImageAlign 無效果 No
ListBox 項目靠右對齊 無效果 No
ListView 將讀取順序設定為 RTL (由右至左);項目保持靠左對齊 將控制項鏡像處理 Yes
MainMenu 執行階段 (非設計階段) 為靠右對齊顯示,且讀取順序為 RTL (由右至左) 無效果 No
MaskedTextBox 由右至左顯示文字。 無效果 No
MonthCalendar 不受影響;視作業系統的語言而定 將控制項鏡像處理 Yes
NotifyIcon 不支援 不支援 No
NumericUpDown 向上和向下按鈕靠左對齊 無效果 No
OpenFileDialog 在由右至左的作業系統上,將包含表單的 RightToLeft 屬性設定為 RightToLeft.Yes 將使對話方塊當地語系化 無效果 No
PageSetupDialog 不受影響;視作業系統的語言而定 無效果 No
Panel 子控制項可能會繼承這個屬性 在控制項中使用 TableLayoutPanel,以提供由右至左支援 Yes
PictureBox 不支援 無效果 No
PrintDialog 不受影響;視作業系統的語言而定 無效果 No
PrintDocument 垂直捲軸變成靠左對齊,而水平捲軸從左邊開始 無效果 No
PrintPreviewDialog 不支援 不支援 No
ProgressBar 不受這個屬性影響 將控制項鏡像處理 Yes
RadioButton 選項按鈕顯示在文字右側 無效果 No
RichTextBox 包含文字的控制項項目會由右至左顯示,且讀取順序為 RTL (由右至左) 無效果 No
SaveFileDialog 不受影響;視作業系統的語言而定 無效果 No
SplitContainer 面板配置反轉;垂直捲軸出現在左側;水平捲軸從右邊開始 使用 TableLayoutPanel 來鏡像處理子控制項的順序 No
Splitter 不支援 無效果 No
StatusBar 不支援;請改用 StatusStrip 無效果;請改用 StatusStrip No
TabControl 不受這個屬性影響 將控制項鏡像處理 Yes
TextBox 文字由右至左顯示,且讀取順序為 RTL (由右至左) 無效果 No
Timer 非必要 非必要 No
ToolBar 不受這個屬性影響;請改用 ToolStrip 無效果;請改用 ToolStrip Yes
ToolTip 設定 RTL (由右至左) 讀取順序 無效果 No
TrackBar 捲軸或追蹤從右邊開始;當 Orientation 垂直時,刻度從右邊出現 無效果 No
TreeView 只設定 RTL (由右至左) 讀取順序 將控制項鏡像處理 Yes
UserControl 垂直捲軸出現在左邊;水平捲軸右邊有捲動方塊 不直接支援;使用 TableLayoutPanel No
VScrollBar 顯示在可捲動的控制項右邊,而不是左邊 無效果 No

編碼方式

Windows Form 支援 Unicode,因此當您建立雙向應用程式時,可以包含任何字元集。 不過,並非所有 Windows Form 控制項在所有平台上都支援 Unicode。

GDI+

您可以使用 GDI+ 來繪製具有由右至左閱讀順序的文字。 用來繪製文字的 DrawString 方法可支援 StringFormat 參數,您可以將其設為 StringFormatFlags 列舉的 DirectionRightToLeft 成員,以反轉文字原始起點。

通用對話方塊

像 [開啟舊檔] 對話方塊之類的系統工具是受 Windows 控制, 所以會繼承作業系統的語言項目。 如果您使用的 Windows 版本具有正確的語言設定,這些對話方塊就可以用雙向語言正確運作。

同樣地,訊息方塊會在整個作業系統中出現,並支援雙向文字。 訊息方塊按鈕上的標題取決於目前的語言設定。 根據預設,訊息方塊不會使用由右至左讀取順序,但是您可以指定參數來變更訊息方塊顯示時的讀取順序。

RightToLeft、Scrollbars 和 ScrollableControl

Windows Form 目前有一項限制,會導致在 RightToLeft 啟用且 AutoScroll 設為 Yes 的情況下,所有衍生自 ScrollableControl 的類別都無法正常運作。 比如說,假設您在表單上放置一個 Panel 之類的控制項,或是衍生自 Panel 的容器類別 (例如 FlowLayoutPanelTableLayoutPanel)。 如果您將容器上的 AutoScroll 設為 Yes,然後在容器內的一或多個控制項上,將 Anchor 屬性設為 Right,則不顯示任何捲軸。 衍生自 ScrollableControl 的類別作用如同 AutoScroll 已設為 No

目前唯一的解決方法是將 ScrollableControl 巢放在另一個 ScrollableControl 中。 例如,如果您需要 TableLayoutPanel 在此情況下運作,您可以將它放在 Panel 控制項中,並將 Panel 上的 AutoScroll 設為 Yes

鏡像

「鏡像」是指將 UI 元素的版面配置反轉,使其流向變成由右至左。 例如,在鏡像的 Windows Form 中,[最小化]、[最大化] 和 [關閉] 按鈕會出現在標題列最左邊,而不是最右邊。

將表單或控制項的 RightToLeft 屬性設為 true,會反轉表單項目的讀取順序,但此設定並不會將配置反轉成由右至左,也就是不會造成鏡像。 例如,設定此屬性並不會將表單標題列中的 [最小化]、[最大化] 和 [關閉] 按鈕移到表單的左邊。 同樣地,某些控制項 (例如 TreeView 控制項) 需要鏡像處理,才能將其顯示變更為適用於阿拉伯文或希伯來文。 您可以設定 RightToLeftLayout 屬性來鏡像處理這些控制項。

您可以建立下列控制項的鏡像版本:

有些控制項已密封。 因此,您不能從其衍生新的控制項。 其中包括 ImageListProgressBar 控制項。

另請參閱