對 Windows Forms 應用程式的雙向支援
您可以使用 Visual Studio 來建立支援雙向 (由右至左) 語言的 Windows 應用程式,例如阿拉伯文和希伯來文。 這包括標準表單、對話方塊、MDI 表單,以及您可以在這些表單中使用的所有控制項,也就是 Control 命名空間中的所有物件。
文化特性支援
文化特性和 UI 文化特性設定可決定應用程式如何使用日期、時間、貨幣和其他資訊。 對文化特性和 UI 文化特性的支援同樣適用於雙向語言,因為其適用於任何其他語言。 如需詳細資訊,請參閱 全域 Windows 表單和 Web 表單的文化特性特定類別。
RightToLeft 和 RightToLeftLayout 屬性
基底 Control 類別 (表單的衍生來源) 包含 RightToLeft 屬性,您可以將其設定,以變更表單及其控制項的讀取順序。 如果您設定表單的 RightToLeft 屬性,根據預設,表單上的控制項會繼承此設定。 不過,在大部分控制項上,也都可以個別設定 RightToLeft 屬性。 另請參閱如何:針對全球化在 Windows Forms 中由右至左顯示文字。
每個控制項的 RightToLeft 屬性效果各不相同。 在某些控制項中,此屬性只會設定讀取順序,例如在 Button、TreeView 和 ToolTip 控制項中。 在其他控制項中,RightToLeft 屬性則可變更讀取順序和配置。 其中包括 RadioButton、ComboBox 和 CheckBox 控制項。 其他控制項需要套用 RightToLeftLayout 屬性,以將其配置由右至左鏡像處理。 下表詳細說明 RightToLeft 和 RightToLeftLayout 屬性如何影響個別的 Windows Form 控制項。
控制項/元件 | RightToLeft 屬性的效果 | RightToLeftLayout 屬性的效果 | 需要鏡像處理嗎? |
---|---|---|---|
Button | 設定 RTL (由右至左) 讀取順序。 反轉 TextAlign、ImageAlign 和 TextImageRelation | 無效果 | 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 | 靠右對齊顯示。 反轉 TextAlign 和 ImageAlign | 無效果 | No |
LinkLabel | 靠右對齊顯示。 反轉 TextAlign 和 ImageAlign | 無效果 | 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 的容器類別 (例如 FlowLayoutPanel 或 TableLayoutPanel)。 如果您將容器上的 AutoScroll 設為 Yes,然後在容器內的一或多個控制項上,將 Anchor 屬性設為 Right,則不顯示任何捲軸。 衍生自 ScrollableControl 的類別作用如同 AutoScroll 已設為 No。
目前唯一的解決方法是將 ScrollableControl 巢放在另一個 ScrollableControl 中。 例如,如果您需要 TableLayoutPanel 在此情況下運作,您可以將它放在 Panel 控制項中,並將 Panel 上的 AutoScroll 設為 Yes。
鏡像
「鏡像」是指將 UI 元素的版面配置反轉,使其流向變成由右至左。 例如,在鏡像的 Windows Form 中,[最小化]、[最大化] 和 [關閉] 按鈕會出現在標題列最左邊,而不是最右邊。
將表單或控制項的 RightToLeft 屬性設為 true
,會反轉表單項目的讀取順序,但此設定並不會將配置反轉成由右至左,也就是不會造成鏡像。 例如,設定此屬性並不會將表單標題列中的 [最小化]、[最大化] 和 [關閉] 按鈕移到表單的左邊。 同樣地,某些控制項 (例如 TreeView 控制項) 需要鏡像處理,才能將其顯示變更為適用於阿拉伯文或希伯來文。 您可以設定 RightToLeftLayout 屬性來鏡像處理這些控制項。
您可以建立下列控制項的鏡像版本:
有些控制項已密封。 因此,您不能從其衍生新的控制項。 其中包括 ImageList 和 ProgressBar 控制項。