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 | Sí |
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 | Sí |
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 | Sí |
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 | Sí |
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 | Sí |
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 | Sí |
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 | Sí |
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
.NET Desktop feedback