Bi-Directional obsługa aplikacji Windows Forms
Program Visual Studio umożliwia tworzenie aplikacji opartych na systemie Windows, które obsługują języki dwukierunkowe (od prawej do lewej), takie jak arabski i hebrajski. Obejmuje to standardowe formularze, okna dialogowe, formularze MDI i wszystkie kontrolki, z którymi można pracować w tych formularzach — czyli wszystkie obiekty w przestrzeni nazw Control.
Obsługa kultury
Ustawienia kultury i kultury interfejsu użytkownika określają, jak aplikacja działa z datami, godzinami, walutą i innymi informacjami. Obsługa kultury i kultury interfejsu użytkownika jest taka sama w przypadku języków dwukierunkowych, jak w przypadku innych języków. Aby uzyskać więcej informacji, zobacz klasy specyficzne dla kultury dla globalnych formularzy systemu Windows i formularzy internetowych.
Właściwości RightToLeft i RightToLeftLayout
Klasa podstawowa Control, z której pochodzą formularze, zawiera właściwość RightToLeft, którą można ustawić, aby zmienić kolejność odczytu formularza i jego kontrolek. Jeśli ustawisz właściwość RightToLeft formularza, domyślnie kontrolki na formularzu dziedziczą to ustawienie. Można jednak również ustawić właściwość RightToLeft indywidualnie dla większości kontrolek. Zobacz również Instrukcje: wyświetlanie tekstu od prawej do lewej w formularzach Windows Forms for Globalization.
Efekt właściwości RightToLeft może się różnić od jednej kontrolki do innej. W niektórych kontrolkach właściwość ustawia tylko kolejność odczytu, tak jak w kontrolkach Button, TreeView i ToolTip. W innych kontrolkach właściwość RightToLeft zmienia zarówno kolejność odczytu, jak i układ. Obejmuje to kontrolki RadioButton, ComboBox i CheckBox. Inne kontrolki wymagają zastosowania właściwości RightToLeftLayout, aby odzwierciedlić układ z prawej na lewą. Poniższa tabela zawiera szczegółowe informacje na temat wpływu właściwości RightToLeft i RightToLeftLayout na poszczególne kontrolki windows Forms.
Kontrolka/składnik | Efekt właściwości RightToLeft | Wpływ właściwości RightToLeftLayout | Wymaga dublowania? |
---|---|---|---|
Button | Ustawia kolejność odczytu RTL. Odwraca TextAlign, ImageAligni TextImageRelation | Brak efektu | Nie |
CheckBox | Pole wyboru jest wyświetlane po prawej stronie tekstu | Brak efektu | Nie |
CheckedListBox | Wszystkie pola wyboru są wyświetlane po prawej stronie tekstu | Brak efektu | Nie |
ColorDialog | Nie dotyczy; zależy od języka systemu operacyjnego | Brak efektu | Nie |
ComboBox | Elementy w kontrolce pola kombi są wyrównane do prawej | Brak efektu | Nie |
ContextMenu | Pojawia się wyrównany do prawej z kolejnością odczytu RTL | Brak efektu | Nie |
DataGrid | Pojawia się wyrównany do prawej z kolejnością odczytu RTL | Brak efektu | Nie |
DataGridView | Ma wpływ zarówno na kolejność odczytywania biblioteki RTL, jak i układ kontrolki | Brak efektu | Nie |
DateTimePicker | Nie dotyczy; zależy od języka systemu operacyjnego | Odzwierciedla kontrolkę | Tak |
DomainUpDown | Wyrównuje w lewo przyciski w górę i w dół | Brak efektu | Nie |
ErrorProvider | Niewspierany | Brak efektu | Nie |
FontDialog | Zależy od języka systemu operacyjnego | Brak efektu | Nie |
Form | Ustawia kolejność odczytu RTL i odwraca paski przewijania | Dubluje formularz | Tak |
GroupBox | Podpis jest wyświetlany w prawo wyrównany. Kontrolki podrzędne mogą dziedziczyć tę właściwość. | Użyj TableLayoutPanel w kontrolce dla obsługi lustrzanego odbicia od prawej do lewej | Nie |
HScrollBar | Rozpoczyna się od pola przewijania (kciuk) wyrównanego do prawej | Brak efektu | Nie |
ImageList | Niewymagane | Brak efektu | Nie |
Label | Wyświetlane jako wyrównane do prawej strony. Odwraca TextAlign i ImageAlign | Brak efektu | Nie |
LinkLabel | Wyświetlane jako wyrównane do prawej. Odwraca TextAlign i ImageAlign | Brak efektu | Nie |
ListBox | Elementy są wyrównane do prawej | Brak efektu | Nie |
ListView | Ustawia kolejność odczytu na RTL; elementy pozostają wyrównane do lewej | Odwzorowuje kontrolkę | Tak |
MainMenu | Wyświetlane wyrównane do prawej z kolejnością odczytu RTL w czasie wykonywania (nie w czasie projektowania) | Brak efektu | Nie |
MaskedTextBox | Wyświetla tekst od prawej do lewej. | Brak efektu | Nie |
MonthCalendar | Nie dotyczy; zależy od języka systemu operacyjnego | Odwzorowuje kontrolkę | Tak |
NotifyIcon | Nieobsługiwane | Nieobsługiwane | Nie |
NumericUpDown | Przyciski w górę i w dół są wyrównane do lewej | Brak efektu | Nie |
OpenFileDialog | W systemach operacyjnych pracujących od prawej do lewej ustaw właściwość RightToLeft formularza na RightToLeft.Yes, aby zlokalizować okno dialogowe. | Brak efektu | Nie |
PageSetupDialog | Nie dotyczy; zależy od języka systemu operacyjnego | Brak efektu | Nie |
Panel | Kontrolki podrzędne mogą dziedziczyć tę właściwość | Użyj TableLayoutPanel w kontrolce, aby zapewnić obsługę od prawej do lewej | Tak |
PictureBox | Nieobsługiwane | Brak efektu | Nie |
PrintDialog | Nie ma wpływu; zależy od języka systemu operacyjnego | Brak efektu | Nie |
PrintDocument | Pionowy pasek przewijania wyrównuje się do lewej, a poziomy pasek przewijania rozpoczyna się z lewej strony. | Brak efektu | Nie |
PrintPreviewDialog | Nieobsługiwane | Nieobsługiwane | Nie |
ProgressBar | Nie ma to wpływu na tę właściwość | Odzwierciedla kontrolkę | Tak |
RadioButton | Przycisk radiowy jest wyświetlany po prawej stronie tekstu | Brak efektu | Nie |
RichTextBox | Elementy sterujące zawierające tekst są wyświetlane od prawej do lewej z kolejnością odczytu RTL | Brak efektu | Nie |
SaveFileDialog | Nie jest to dotknięte; zależy od języka systemu operacyjnego | Brak efektu | Nie |
SplitContainer | Układ panelu jest odwrócony; pionowy pasek przewijania jest wyświetlany po lewej stronie; poziomy pasek przewijania zaczyna się od prawej | Użyj TableLayoutPanel do odwzorowania kolejności kontrolek podrzędnych | Nie |
Splitter | Nie obsługiwane | Brak efektu | Nie |
StatusBar | Nieobsługiwane; Zamiast tego użyj StatusStrip | Brak efektu; Zamiast tego użyj StatusStrip | Nie |
TabControl | Nie ma to wpływu na tę właściwość | Odwzorowuje kontrolkę | Tak |
TextBox | Wyświetla tekst od prawej do lewej z kolejnością odczytu RTL | Brak efektu | Nie |
Timer | Niewymagane | Niewymagane | Nie |
ToolBar | Nie ma to wpływu na tę właściwość; Zamiast tego użyj ToolStrip | Brak efektu; Zamiast tego użyj ToolStrip | Tak |
ToolTip | Ustawia kolejność odczytywania biblioteki RTL | Brak efektu | Nie |
TrackBar | Przewijanie lub śledzenie zaczyna się od prawej strony; gdy Orientation jest ustawiona pionowo, tiki pojawiają się z prawej strony. | Brak efektu | Nie |
TreeView | Ustawia tylko kolejność odczytu RTL | Dubluje kontrolkę | Tak |
UserControl | Pionowy pasek przewijania jest wyświetlany po lewej stronie; poziomy pasek przewijania ma kciuk po prawej stronie | Brak bezpośredniego wsparcia; użyj TableLayoutPanel | Nie |
VScrollBar | Wyświetlane po lewej stronie zamiast prawej strony kontrolek z możliwością przewijania | Brak efektu | Nie |
Kodowanie
Formularze systemu Windows obsługują kod Unicode, dzięki czemu można uwzględnić dowolny zestaw znaków podczas tworzenia aplikacji dwukierunkowych. Jednak nie wszystkie kontrolki Windows Forms obsługują kod Unicode na wszystkich platformach.
GDI+
Możesz użyć interfejsu GDI+ do narysowania tekstu z kolejnością odczytu od prawej do lewej. Metoda DrawString, która służy do rysowania tekstu, obsługuje parametr StringFormat
, który można ustawić na element członkowski DirectionRightToLeft wyliczenia StringFormatFlags w celu odwrócenia punktu pochodzenia tekstu.
Typowe okna dialogowe
Narzędzia systemowe, takie jak Otwieranie pliku okno dialogowe, są pod kontrolą systemu Windows. Dziedziczą elementy języka z systemu operacyjnego. Jeśli używasz wersji systemu Windows z poprawnymi ustawieniami języka, te okna dialogowe będą działać poprawnie z językami dwukierunkowymi.
Podobnie pola komunikatów przechodzą przez system operacyjny i obsługują tekst dwukierunkowy. Podpisy przycisków okna komunikatów są oparte na bieżącym ustawieniu języka. Domyślnie pola komunikatów nie używają kolejności odczytu od prawej do lewej, ale można określić parametr, aby zmienić kolejność odczytu po wyświetleniu pól komunikatów.
RightToLeft, Scrollbars i ScrollableControl
Obecnie istnieje ograniczenie dotyczące formularzy Windows, które uniemożliwia prawidłowe działanie wszystkich klas pochodzących z ScrollableControl, kiedy zarówno RightToLeft jest włączony, a AutoScroll ustawiony na wartość Yes. Załóżmy na przykład, że umieszczasz kontrolkę, taką jak Panel— lub klasę kontenera pochodzącą z Panel (np. FlowLayoutPanel lub TableLayoutPanel) — w formularzu. Jeśli ustawisz AutoScroll w kontenerze na Yes, a następnie ustawisz właściwość Anchor na co najmniej jednej kontrolce wewnątrz kontenera na Right, a wtedy żaden pasek przewijania się nie pojawi. Klasa pochodząca z ScrollableControl działa tak, jakby AutoScroll ustawiono na No.
Aktualnie jedynym obejściem jest zagnieżdżenie ScrollableControl wewnątrz innego ScrollableControl. Jeśli potrzebujesz, aby TableLayoutPanel działał w tej sytuacji, możesz umieścić go w kontrolce Panel i ustawić AutoScroll na Panel, aby działał jako Yes.
Dublowanie
Lustrzane odbicie odnosi się do odwrócenia układu elementów interfejsu użytkownika, tak aby przepływały od prawej do lewej. Na przykład w odwróconym formularzu systemu Windows przyciski Minimalizuj, Maksymalizuj i Zamknij są wyświetlane po lewej stronie na pasku tytułu, a nie po prawej stronie.
Ustawienie właściwości RightToLeft formularza lub kontrolki na true
odwraca kolejność odczytywania elementów w formularzu, ale to ustawienie nie zmienia układu na od prawej do lewej — to znaczy, że nie powoduje odbicia lustrzanego. Na przykład ustawienie tej właściwości nie sprawia, że przyciski Zamknij, Minimalizuji Maksymalizuj na pasku tytułu formularza zostają przeniesione na lewą stronę formularza. Podobnie niektóre kontrolki, takie jak kontrolka TreeView, wymagają symetrycznego odbicia w celu zmiany ich wyświetlania na odpowiedni dla języka arabskiego lub hebrajskiego. Te kontrolki można dublować, konfigurując właściwość RightToLeftLayout.
Można utworzyć zdublowane wersje następujących kontrolek:
Niektóre kontrolki są zapieczętowane. W związku z tym nie można utworzyć nowej kontrolki na ich podstawie. Obejmują one kontrolki ImageList i ProgressBar.
Zobacz też
.NET Desktop feedback