Compatibilidad bidireccional en las aplicaciones de Windows Forms

Puede usar Visual Studio para crear aplicaciones basadas en Windows que admitan idiomas bidireccionales (de derecha a izquierda), como el árabe y hebreo. Esto incluye formularios estándar, cuadros de diálogo, formularios MDI y todos los controles con los que puede trabajar en estos formularios, es decir, todos los objetos del espacio de nombres Control.

Compatibilidad con referencias culturales

La configuración de referencia cultural e idioma de la interfaz de usuario determina cómo utiliza una aplicación las fechas, las horas, las monedas y otros datos. La compatibilidad con las referencias culturales y los idiomas de la interfaz de usuario es la misma con los idiomas bidireccionales que con los demás idiomas. Para más información, consulte Clases específicas de las referencias culturales para Windows Forms y formularios Web Forms globales.

Propiedades RightToLeft y RightToLeftLayout

La clase base Control, de la que derivan los formularios, incluye una propiedad RightToLeft que puede establecer para cambiar el orden de lectura de un formulario y sus controles. Si establece la propiedad RightToLeft del formulario, los controles predeterminados del formulario heredarán este ajuste. Sin embargo, también puede establecer la propiedad RightToLeft individualmente en la mayoría de los controles. Vea también Cómo: Mostrar texto de derecha a izquierda en Windows Forms para la globalización

El efecto de la propiedad RightToLeft puede diferir de un control a otro. En algunos controles, la propiedad solo establece el orden de lectura, como en los controles Button, TreeView y ToolTip. En otros controles, la propiedad RightToLeft cambia el orden de lectura y el diseño. Esto incluye los controles RadioButton, ComboBox y CheckBox. Otros controles requieren que se aplique la propiedad RightToLeftLayout para reflejar su diseño de derecha a izquierda. En la tabla siguiente, se proporcionan detalles sobre cómo las propiedades RightToLeft y RightToLeftLayout afectan a los controles individuales de los formularios Windows Forms.

Control/componente Efecto de la propiedad RightToLeft Efecto de la propiedad RightToLeftLayout ¿Requiere la creación de reflejos?
Button Establece el orden de lectura de derecha a izquierda. Invierte TextAlign, ImageAlign y TextImageRelation Sin efecto No
CheckBox La casilla se muestra en el lado derecho del texto Sin efecto No
CheckedListBox Todas las casillas se muestran en el lado derecho del texto Sin efecto No
ColorDialog No se ve afectada, depende del idioma del sistema operativo Sin efecto No
ComboBox Los elementos del control de cuadro combinado se alinean a la derecha Sin efecto No
ContextMenu Aparece alineado a la derecha con el orden de lectura de derecha a izquierda Sin efecto No
DataGrid Aparece alineado a la derecha con el orden de lectura de derecha a izquierda Sin efecto No
DataGridView Afecta al orden de lectura de derecha a izquierda y al diseño de los controles Sin efecto No
DateTimePicker No se ve afectada, depende del idioma del sistema operativo Refleja el control
DomainUpDown Alinea a la izquierda los botones de arriba y abajo Sin efecto No
ErrorProvider No compatible Sin efecto No
FontDialog Depende del idioma del sistema operativo Sin efecto No
Form Establece el orden de lectura de derecha a izquierda e invierte las barras de desplazamiento Refleja el formulario
GroupBox El título se muestra alineado a la derecha. Los controles secundarios pueden heredar esta propiedad. Use TableLayoutPanel dentro del control para admitir la creación de reflejos de derecha a izquierda No
HScrollBar Comienza con el cuadro de desplazamiento (el control) alineado a la derecha Sin efecto No
ImageList No se requiere Sin efecto No
Label Se muestra alineado a la derecha. Invierte TextAlign y ImageAlign Sin efecto No
LinkLabel Se muestra alineado a la derecha. Invierte TextAlign y ImageAlign Sin efecto No
ListBox Los elementos se alinean a la derecha Sin efecto No
ListView Establece el orden de lectura de derecha a izquierda y los elementos permanecen alineados a la izquierda Refleja el control
MainMenu Se muestra alineado a la derecha con el orden de lectura de derecha a izquierda en tiempo de ejecución (no en tiempo de diseño) Sin efecto No
MaskedTextBox Muestra el texto de derecha a izquierda. Sin efecto No
MonthCalendar No se ve afectada, depende del idioma del sistema operativo Refleja el control Yes
NotifyIcon No compatible No compatible No
NumericUpDown Los botones de arriba y abajo se alinean a la izquierda Sin efecto No
OpenFileDialog En los sistemas operativos de derecha a izquierda, al establecer la propiedad RightToLeft del formulario contenedor en RightToLeft.Yes se localiza el cuadro de diálogo. Sin efecto No
PageSetupDialog No se ve afectada, depende del idioma del sistema operativo Sin efecto No
Panel Los controles secundarios pueden heredar esta propiedad Use TableLayoutPanel dentro del control para admitir la disposición de derecha a izquierda Yes
PictureBox No compatible Sin efecto No
PrintDialog No se ve afectada, depende del idioma del sistema operativo Sin efecto No
PrintDocument La barra de desplazamiento vertical se alinea a la izquierda y la barra de desplazamiento horizontal comienza a la izquierda Sin efecto No
PrintPreviewDialog No compatible No compatible No
ProgressBar No le afecta esta propiedad Refleja el control
RadioButton El botón de radio se muestra en el lado derecho del texto Sin efecto No
RichTextBox Los elementos de control que incluyen texto se muestran de derecha a izquierda con el orden de lectura de derecha a izquierda Sin efecto No
SaveFileDialog No se ve afectada, depende del idioma del sistema operativo Sin efecto No
SplitContainer Se invierte el diseño del panel, la barra de desplazamiento vertical aparece a la izquierda y la barra de desplazamiento horizontal comienza desde la derecha Use TableLayoutPanel para reflejar el orden de los controles secundarios No
Splitter No compatible Sin efecto No
StatusBar No se admite: utilice StatusStrip en su lugar Ningún efecto: utilice StatusStrip en su lugar No
TabControl No le afecta esta propiedad Refleja el control
TextBox Muestra el texto de derecha a izquierda con el orden de lectura de derecha a izquierda Sin efecto No
Timer No se requiere No se requiere No
ToolBar No le afecta esta propiedad: use ToolStrip en su lugar Ningún efecto: utilice ToolStrip en su lugar
ToolTip Establece el orden de lectura de derecha a izquierda Sin efecto No
TrackBar El desplazamiento o el seguimiento comienza a la derecha. Cuando Orientation es vertical, los tics se producen desde la derecha Sin efecto No
TreeView Establece el orden de lectura de derecha a izquierda solamente Refleja el control
UserControl La barra de desplazamiento vertical aparece a la izquierda y la barra de desplazamiento horizontal tiene el control a la derecha Sin compatibilidad directa: use TableLayoutPanel No
VScrollBar Se muestra en el lado izquierdo, en lugar del derecho, de los controles desplazables Sin efecto No

Encoding

Los formularios Windows Forms admiten Unicode, por lo que puede incluir cualquier juego de caracteres al crear aplicaciones bidireccionales. Sin embargo, no todos los controles de formularios Windows Forms admiten Unicode en todas las plataformas.

GDI+

Puede usar GDI+ para dibujar texto con orden de lectura de derecha a izquierda. El método DrawString, que se utiliza para dibujar texto, admite un parámetro StringFormat que puede establecer como el miembro DirectionRightToLeft de la enumeración StringFormatFlags con el fin de invertir el punto de origen del texto.

Cuadros de diálogo comunes

Las herramientas del sistema, como el cuadro de diálogo Abrir archivo, están bajo el control de Windows. Heredan los elementos de idioma del sistema operativo. Si está utilizando una versión de Windows con la configuración de idioma correcta, estos cuadros de diálogo funcionarán correctamente con los idiomas bidireccionales.

De forma similar, los cuadros de mensaje pasan por el sistema operativo y admiten texto bidireccional. Los títulos de los botones de los cuadros de mensaje se basan en la configuración de idioma vigente. De forma predeterminada, los cuadros de mensaje no utilizan el orden de lectura de derecha a izquierda, pero puede especificar un parámetro para cambiar el orden de lectura cuando se muestran los cuadros de mensaje.

RightToLeft, Scrollbars y ScrollableControl

Actualmente hay una limitación en Windows Forms que impide que todas las clases derivadas de ScrollableControl actúen correctamente cuando RightToLeft está habilitado y AutoScroll se establece como Yes. Por ejemplo, supongamos que coloca un control como Panel, o una clase de contenedor derivada de Panel (como FlowLayoutPanel o TableLayoutPanel), en el formulario. Si establece AutoScroll en el contenedor como Yes y, luego, establece la propiedad Anchor en uno o varios de los controles del contenedor como Right, no aparecerá ninguna barra de desplazamiento en ningún momento. La clase derivada de ScrollableControl actúa como si AutoScroll estuviera establecida como No.

Actualmente, la única solución es anidar ScrollableControl dentro de otro ScrollableControl. Por ejemplo, si necesita que TableLayoutPanel funcione en esta situación, puede colocarlo dentro de un control Panel y establecer AutoScroll en el Panel como Yes.

Creación de reflejo

La creación de reflejos consiste en invertir el diseño de los elementos de la interfaz de usuario para que fluyan de derecha a izquierda. En un formulario Windows Forms reflejado, por ejemplo, los botones Minimizar, Maximizar y Cerrar aparecen en el extremo izquierdo de la barra de título, en lugar del extremo derecho.

Al configurar la propiedad RightToLeft de un formulario o un control como true, se invierte el orden de lectura de los elementos de un formulario, pero esta configuración no invierte el diseño de manera que quede de derecha a izquierda, es decir, no provoca la creación de un reflejo. Por ejemplo, al establecer esta propiedad, los botones Minimizar, Maximizar y Cerrar de la barra de título del formulario no se mueven a la izquierda del formulario. Del mismo modo, algunos controles, como el control TreeView, deben reflejarse para cambiar su apariencia y ser adecuados para el árabe o el hebreo. Puede reflejar estos controles configurando la propiedad RightToLeftLayout.

Puede crear versiones reflejadas de los siguientes controles:

Algunos controles están sellados, de modo que no puede derivar un nuevo control de ellos: por ejemplo, los controles ImageList y ProgressBar.

Consulte también