suporte Bi-Directional para aplicativos do Windows Forms
Você pode usar o Visual Studio para criar aplicativos baseados no Windows que dão suporte a idiomas bidirecionais (da direita para a esquerda), como árabe e hebraico. Isso inclui formulários padrão, caixas de diálogo, formulários MDI e todos os controles com os quais você pode trabalhar nesses formulários, ou seja, todos os objetos no namespace Control.
Suporte à cultura
As configurações de cultura e cultura da interface do usuário determinam como um aplicativo funciona com datas, horários, moeda e outras informações. O suporte à cultura e à cultura da interface do usuário é o mesmo para idiomas bidirecionais como para qualquer outro idioma. Para obter mais informações, consulte Classes específicas de cultura para Windows Forms e Web Forms globais.
Propriedades RightToLeft e RightToLeftLayout
A classe Control base, da qual os formulários derivam, inclui uma propriedade RightToLeft que você pode definir para alterar a ordem de leitura de um formulário e seus controles. Se você definir a propriedade RightToLeft do formulário, por padrão, os controles no formulário herdarão essa configuração. No entanto, você também pode definir a propriedade RightToLeft individualmente na maioria dos controles. Também consulte Como exibir texto da direita para a esquerda nos Windows Forms para globalização.
O efeito da propriedade RightToLeft pode ser diferente de um controle para outro. Em alguns controles, a propriedade define apenas a ordem de leitura, como nos controles Button, TreeView e ToolTip. Em outros controles, a propriedade RightToLeft altera a ordem de leitura e o layout. Isso inclui os controles RadioButton, ComboBox e CheckBox. Alguns controles requerem que a propriedade RightToLeftLayout seja aplicada para que seu layout seja espelhado da direita para a esquerda. A tabela a seguir fornece detalhes sobre como as propriedades RightToLeft e RightToLeftLayout afetam controles individuais do Windows Forms.
Controle/componente | Propriedade RightToLeft | Efeito da propriedade RightToLeftLayout | Requer espelhamento? |
---|---|---|---|
Button | Define o sentido da leitura RTL. Inverte TextAlign, ImageAligne TextImageRelation | Nenhum efeito | Não |
CheckBox | A caixa de seleção é exibida no lado direito do texto | Nenhum efeito | Não |
CheckedListBox | Todas as caixas de seleção são exibidas no lado direito do texto | Nenhum efeito | Não |
ColorDialog | Não afetado; depende do idioma do sistema operacional | Nenhum efeito | Não |
ComboBox | Itens no controle de caixa de combinação são alinhadas à direita | Nenhum efeito | Não |
ContextMenu | É exibido alinhado à direita com sentido da leitura RTL | Nenhum efeito | Não |
DataGrid | É exibido alinhado à direita com sentido da leitura RTL | Nenhum efeito | Não |
DataGridView | Afeta a ordem e controle de layout de leitura RTL | Nenhum efeito | Não |
DateTimePicker | Não afetado; depende do idioma do sistema operacional | Espelha o controle | Sim |
DomainUpDown | Alinha à esquerda os botões para cima e para baixo | Nenhum efeito | Não |
ErrorProvider | Sem suporte | Nenhum efeito | Não |
FontDialog | Depende do idioma do sistema operacional | Nenhum efeito | Não |
Form | Define a ordem de leitura RTL e inverte as barras de rolagem | Reflete a forma | Sim |
GroupBox | A legenda é exibida alinhada à direita. Controles filho podem herdar esta propriedade. | Usar um TableLayoutPanel dentro do controle para suporte ao espelhamento da direita para a esquerda | Não |
HScrollBar | Começa com a caixa de rolagem (thumb) alinhada à direita | Nenhum efeito | Não |
ImageList | Não é necessário | Nenhum efeito | Não |
Label | Exibido alinhado à direita. Inverte TextAlign e ImageAlign | Nenhum efeito | Não |
LinkLabel | Exibido alinhado à direita. Inverte TextAlign e ImageAlign | Nenhum efeito | Não |
ListBox | Itens são alinhados à direita | Nenhum efeito | Não |
ListView | Define a ordem de leitura como RTL; os elementos permanecem alinhados à esquerda | Espelha o controle | Sim |
MainMenu | Exibido alinhado à direita com sentido da leitura RTL em tempo de execução (não em tempo de design) | Nenhum efeito | Não |
MaskedTextBox | Exibe o texto da direita para a esquerda. | Nenhum efeito | Não |
MonthCalendar | Não afetado; depende do idioma do sistema operacional | Espelha o controle | Sim |
NotifyIcon | Sem suporte | Sem suporte | Não |
NumericUpDown | Os botões para cima e para baixo estão alinhados à esquerda | Nenhum efeito | Não |
OpenFileDialog | Em sistemas operacionais da direita para a esquerda, definir a propriedade RightToLeft do formulário para RightToLeft.Yes localiza a caixa de diálogo | Nenhum efeito | Não |
PageSetupDialog | Não afetado; depende do idioma do sistema operacional | Nenhum efeito | Não |
Panel | Controles filho podem herdar esta propriedade | Usar TableLayoutPanel dentro do controle para suporte da direita para a esquerda | Sim |
PictureBox | Sem suporte | Nenhum efeito | Não |
PrintDialog | Não afetado; depende do idioma do sistema operacional | Nenhum efeito | Não |
PrintDocument | A barra de rolagem vertical fica alinhada à esquerda e a barra de rolagem horizontal começa da esquerda | Nenhum efeito | Não |
PrintPreviewDialog | Sem suporte | Sem suporte | Não |
ProgressBar | Não afetado por essa propriedade | Espelha o controle | Sim |
RadioButton | O botão de opção é exibido à direita do texto | Nenhum efeito | Não |
RichTextBox | Elementos de controle que incluem texto são exibidos da direita para a esquerda com ordem de leitura RTL | Nenhum efeito | Não |
SaveFileDialog | Não afetado; depende do idioma do sistema operacional | Nenhum efeito | Não |
SplitContainer | O layout do painel é invertido; a barra de rolagem vertical é exibida à esquerda; a barra de rolagem horizontal começa a partir da direita | Usar um TableLayoutPanel para espelhar a ordem dos controles filho | Não |
Splitter | Sem suporte | Nenhum efeito | Não |
StatusBar | Sem suporte; em vez disso, use StatusStrip | Nenhum efeito; em vez disso, use StatusStrip | Não |
TabControl | Não afetado por esta propriedade | Espelha o controle | Sim |
TextBox | Exibe texto da direita para a esquerda com ordem de leitura RTL | Nenhum efeito | Não |
Timer | Não é necessário | Não é necessário | Não |
ToolBar | Não é afetado por esta propriedade; use ToolStrip em vez disso | Nenhum efeito; em vez disso, use ToolStrip | Sim |
ToolTip | Define a ordem de leitura RTL | Nenhum efeito | Não |
TrackBar | A rolagem ou a faixa começa da direita; quando Orientation é vertical, os tiques ocorrem da direita | Nenhum efeito | Não |
TreeView | Define somente a ordem de leitura RTL | Espelha o controle | Sim |
UserControl | A barra de rolagem vertical é exibida à esquerda; na barra de rolagem horizontal, o polegar está à direita | Sem suporte direto; use um TableLayoutPanel | Não |
VScrollBar | Exibido no lado esquerdo em vez do lado direito dos controles roláveis | Nenhum efeito | Não |
Codificação
Os Windows Forms dão suporte ao Unicode, para que você possa incluir qualquer conjunto de caracteres ao criar seus aplicativos bidirecionais. No entanto, nem todos os controles do Windows Forms dão suporte ao Unicode em todas as plataformas.
GDI+
Você pode usar GDI+ para desenhar texto com ordem de leitura da direita para a esquerda. O método DrawString, que é usado para desenhar texto, dá suporte a um parâmetro StringFormat
que você pode definir para o membro DirectionRightToLeft da enumeração StringFormatFlags para reverter o ponto de origem do texto.
Caixas de diálogo comuns
Ferramentas do sistema, como a caixa de diálogo Abrir Arquivo, estão sob o controle do Windows. Eles herdam elementos de linguagem do sistema operacional. Se você estiver usando uma versão do Windows com as configurações de idioma corretas, essas caixas de diálogo funcionarão corretamente com idiomas bidirecionais.
Da mesma forma, as caixas de mensagem passam pelo sistema operacional e dão suporte a texto bidirecional. As legendas nos botões da caixa de mensagem são baseadas na configuração de idioma atual. Por padrão, as caixas de mensagem não usam a ordem de leitura da direita para a esquerda, mas você pode especificar um parâmetro para alterar a ordem de leitura quando as caixas de mensagem são exibidas.
RightToLeft, Scrollbars e ScrollableControl
Atualmente, há uma limitação nos Windows Forms que impede que todas as classes derivadas de ScrollableControl agissem corretamente quando ambos os RightToLeft estiverem habilitados e AutoScroll estiver definido como Yes. Por exemplo, digamos que você coloque um controle como Panel— ou uma classe de contêiner derivada de Panel (como FlowLayoutPanel ou TableLayoutPanel)— em seu formulário. Se você definir AutoScroll no contêiner para Yes e, em seguida, definir a propriedade Anchor em um ou mais dos controles dentro do contêiner para Right, nenhuma barra de rolagem será exibida. A classe derivada de ScrollableControl atua como se AutoScroll fosse definida como No.
Atualmente, a única solução alternativa é aninhar o ScrollableControl dentro de outro ScrollableControl. Por exemplo, se você precisar TableLayoutPanel para trabalhar nessa situação, poderá colocá-la dentro de um controle Panel e definir AutoScroll no Panel para Yes.
Espelhamento
Espelhamento refere-se a inverter o layout dos elementos da interface para que eles fluam da direita para a esquerda. Em um Windows Form espelhado, por exemplo, os botões Minimizar, Maximizar e Fechar aparecem à esquerda na barra de título, não à direita.
Definir a propriedade RightToLeft de um formulário ou controle para true
inverte a ordem de leitura dos elementos em um formulário, mas essa configuração não inverte o layout para ser da direita para a esquerda, ou seja, não causa espelhamento. Por exemplo, definir essa propriedade não move os botões Minimizar, Maximizare Fechar na barra de título do formulário para o lado esquerdo do formulário. Da mesma forma, alguns controles, como o controle TreeView, exigem espelhamento para alterar sua exibição para que sejam apropriados para árabe ou hebraico. Você pode espelhar esses controles definindo a propriedade RightToLeftLayout.
Você pode criar versões espelhadas dos seguintes controles:
Alguns controles são lacrados. Portanto, você não pode derivar um novo controle deles. Eles incluem os controles ImageList e ProgressBar.
Consulte também
.NET Desktop feedback