Compartir a través de


Arquitectura del componente de control ToolStrip

Las ToolStrip clases y ToolStripItem proporcionan un sistema flexible y extensible para mostrar elementos de barra de herramientas, estado y menú. Estas clases están incluidas en el System.Windows.Forms espacio de nombres y todas se denominan normalmente con el prefijo "ToolStrip" (como ToolStripOverflow) o con el sufijo "Strip" (como MenuStrip).

Barra de herramientas

En los temas siguientes se describen ToolStrip y los controles que derivan de él.

ToolStrip es la clase base abstracta para MenuStrip, StatusStripy ContextMenuStrip. El siguiente modelo de objetos muestra la ToolStrip jerarquía de herencia.

Diagrama que muestra el modelo de objetos ToolStrip.

Puede acceder a todos los elementos de un ToolStrip a través de la Items colección . Puede acceder a todos los elementos de un ToolStripDropDownItem a través de la DropDownItems colección . En una clase derivada de ToolStrip, también puede usar la DisplayedItems propiedad para tener acceso solo a los elementos que se muestran actualmente. Estos son los elementos que no están actualmente en un menú desplegable.

Los siguientes elementos están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control ToolStrip.

MenuStrip es el contenedor de nivel superior que reemplaza MainMenua . También proporciona control de claves y varias características de interfaz de documento (MDI). Funcionalmente, ToolStripDropDownItem y ToolStripMenuItem funcionan junto con MenuStrip, aunque se derivan de ToolStripItem.

Los siguientes elementos están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control MenuStrip.

StatusStrip

StatusStrip reemplaza el StatusBar control . Las características especiales de StatusStrip incluyen un diseño de tabla StatusStrip personalizado, compatibilidad con el ajuste de tamaño y movimiento del formulario, y la propiedad ToolStripStatusLabel, que permite que un se rellene automáticamente al ocupar el espacio disponible.

Los siguientes elementos están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control StatusStrip.

ContextMenuStrip

ContextMenuStrip reemplaza a ContextMenu. Puede asociar un ContextMenuStrip con cualquier control, y un clic con el botón derecho del mouse muestra automáticamente el menú contextual (o menú de acceso directo). Puedes mostrar un ContextMenuStrip mediante programación utilizando el método Show. ContextMenuStrip admite eventos cancelables Opening y Closing para manejar el rellenado dinámico y los escenarios de múltiples clics. ContextMenuStrip admite imágenes, estado de comprobación de elementos de menú, texto, teclas de acceso, métodos abreviados y menús en cascada.

Los siguientes elementos están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control ContextMenuStrip.

Características genéricas de ToolStrip

En los temas siguientes se describen las características y el comportamiento que son genéricos para los ToolStrip y los controles derivados.

Pintura

Puede realizar una pintura personalizada en los ToolStrip controles de varias maneras. Al igual que con otros controles de Windows Forms, tanto ToolStrip como ToolStripItem tienen métodos OnPaint reemplazables y eventos Paint. Al igual que con la pintura regular, el sistema de coordenadas es relativo al área cliente del control; es decir, la esquina superior izquierda del control es 0, 0. El evento Paint y el método OnPaint de un ToolStripItem se comportan como otros eventos de pintura de control.

Los ToolStrip controles también ofrecen un acceso más detallado a la representación de los elementos y el contenedor a través de la clase ToolStripRenderer, que tiene métodos reemplazables para pintar el fondo, el fondo del elemento, la imagen del elemento, la flecha del elemento, el texto del elemento y el borde de ToolStrip. Los argumentos de evento de estos métodos exponen varias propiedades, como rectángulos, colores y formatos de texto que se pueden ajustar según sea necesario.

Para ajustar solo algunos aspectos de cómo se pinta un elemento, normalmente invalida el ToolStripRenderer.

Si va a escribir un nuevo elemento y desea controlar todos los aspectos de la pintura, invalide el OnPaint método . Desde dentro de OnPaint, puede usar métodos de ToolStripRenderer.

De forma predeterminada, ToolStrip está almacenado en búfer doble, tomando ventaja de la configuración OptimizedDoubleBuffer.

Crianza

El concepto de tenencia y jerarquía en contenedores es más complejo en los controles ToolStrip que en otros controles de contenedor de Windows Forms. Esto es necesario para admitir escenarios dinámicos, como desbordamiento, uso compartido de elementos desplegables entre varios ToolStrip elementos y para admitir la generación de un ContextMenuStrip elemento desde un control.

En la lista siguiente se describen los miembros relacionados con la crianza y se explica su uso.

  • OwnerItem tiene acceso al elemento que es el origen del elemento desplegable. Esto es similar a SourceControl, pero en lugar de devolver un control , devuelve un ToolStripItem.

  • SourceControl determina qué control es el origen de ContextMenuStrip cuando varios controles comparten el mismo ContextMenuStrip.

  • GetCurrentParent es un descriptor de acceso de solo lectura a la propiedad Parent. Un elemento primario difiere de un propietario en que un elemento primario denota la corriente ToolStrip devuelta en la que se muestra el elemento, que podría estar en el área de desbordamiento.

  • Owner devuelve el ToolStrip cuya colección Items contiene el objeto actual ToolStripItem. Esta es la mejor manera de hacer referencia a ImageList o a otras propiedades en el ToolStrip de nivel superior sin escribir código especial para gestionar el desbordamiento.

Comportamiento de los controles heredados

Los controles siguientes se bloquean siempre que se usen en la herencia:

Por ejemplo, cree una nueva aplicación de Windows Forms mediante uno o varios de los controles de la lista anterior. Establezca el modificador de acceso de uno o varios controles en public o protectedy, a continuación, compile el proyecto. Agregue un formulario que herede del primer formulario y, a continuación, seleccione un control heredado. El control aparece bloqueado y se comporta como si su modificador de acceso fuera private.

Soporte de herencia de ToolStripContainer

El ToolStripContainer control admite escenarios heredados limitados, similar al ejemplo siguiente:

  1. Cree una nueva aplicación Windows Forms.

  2. Agregue un ToolStripContainer elemento al formulario.

  3. Establezca el modificador de acceso de ToolStripContainer a public o protected.

  4. Agregue cualquier combinación de ToolStrip, MenuStrip y ContextMenuStrip controles a las regiones ToolStripPanel de ToolStripContainer.

  5. Compile el proyecto.

  6. Agregue un formulario que herede del primer formulario.

  7. Seleccione el elemento heredado ToolStripContainer en el formulario.

Comportamiento heredado de controles hijos

Después de completar los pasos anteriores, se produce el siguiente comportamiento heredado:

  • En el diseñador, el control aparece con un icono heredado.

  • Los ToolStripPanel controles están bloqueados; no se puede seleccionar ni reorganizar su contenido.

  • Puede agregar controles a ToolStripContentPanel, mover los controles y convertirlos en controles secundarios de ToolStripContentPanel.

  • Los cambios se conservan después de compilar el formulario.

    Nota:

    Quite los modificadores de acceso de todos los controles ToolStripPanel que forman parte de un ToolStripContainer. El modificador de acceso del ToolStripContainer rige todo el control.

Confianza parcial

Las limitaciones de los ToolStrip bajo confianza parcial están diseñadas para evitar la entrada involuntaria de información personal que podría ser utilizada por personas o servicios no autorizados. Las medidas de protección son las siguientes:

  • ToolStripDropDown los controles requieren mostrar AllWindows elementos en un ToolStripControlHost. Esto se aplica a ambos controles intrínsecos, como ToolStripTextBox, ToolStripComboBoxy ToolStripProgressBar a los controles creados por el usuario. Si no se cumple este requisito, no se muestran estos elementos. No se inicia ninguna excepción.

  • No se permite establecer la propiedad AutoClose en false, y se omite el parámetro de evento cancelable Closing. Esto hace que sea imposible introducir más de una vez una tecla sin que se cierre el elemento desplegable. Si no se cumple este requisito, estos elementos no se muestran. No se inicia ninguna excepción.

  • Muchos eventos de control de pulsaciones de teclas no se generarán si se producen en contextos de confianza parciales distintos de AllWindows.

  • Las claves de acceso no se procesan cuando AllWindows no se concede.

Uso

Los siguientes patrones de uso tienen un efecto en el diseño, la ToolStrip interacción del teclado y el comportamiento del usuario final:

  • Unido a un ToolStripPanel

    ToolStrip se puede reposicionar dentro de ToolStripPanel y entre ToolStripPanels. La Dock propiedad se omite y, si la Stretch propiedad es false, el tamaño de ToolStrip aumenta a medida que se agregan elementos a ToolStripPanel. Normalmente, no ToolStrip participa en el orden de tabulación.

  • Acoplado

    ToolStrip Se coloca en un lado de un contenedor en una posición fija y su tamaño se expande por todo el borde al que está acoplado. Normalmente, no ToolStrip participa en el orden de tabulación.

  • Absolutamente posicionado

    ToolStrip es como otros controles ya que se coloca mediante la propiedad Location, tiene un tamaño fijo, y normalmente participa en el orden de tabulación.

Interacción con el teclado

Claves de acceso

Combinadas con o siguiendo la tecla ALT, las teclas de acceso son una manera de activar un control mediante el teclado. ToolStrip admite claves de acceso explícitas e implícitas. La definición explícita usa un carácter y (&) que precede a la letra. La definición implícita usa un algoritmo que intenta buscar un elemento coincidente en función del orden de los caracteres de una propiedad determinada Text .

Teclas de acceso rápido

Las teclas de acceso rápido que utiliza un MenuStrip se definen mediante una combinación con la enumeración Keys (que no tiene un orden específico). También puede usar la ShortcutKeyDisplayString propiedad para mostrar solo con texto una tecla de método abreviado, como mostrar "Del" en lugar de "Eliminar".

La tecla ALT activa el MenuStrip objeto al que MainMenuStrip apunta. Desde allí, CTRL+TAB navega entre los controles ToolStrip dentro de ToolStripPanels. La tecla TAB y las teclas de dirección del teclado numérico navegan entre los elementos de un ToolStrip. Un algoritmo especial controla la navegación en la región de desbordamiento. BARRA ESPACIADORA selecciona un ToolStripButton, ToolStripDropDownButton o ToolStripSplitButton.

Enfoque y validación

Cuando se activa mediante la tecla ALT, MenuStrip o ToolStrip generalmente no alteran el foco del control que ya lo tiene. Si hay un control hospedado dentro de MenuStrip o dentro de una lista desplegable de MenuStrip, el control gana el foco cuando el usuario presiona la tecla TAB. En general, es posible que los eventos GotFocus, LostFocus, Enter y Leave de MenuStrip no se generen cuando son activados por el teclado. En tales casos, use los eventos MenuActivate y MenuDeactivate en su lugar.

De forma predeterminada, CausesValidation es false. Llame Validate explícitamente en su formulario para realizar la validación.

Diseño

Controla el diseño de ToolStrip eligiendo uno de los miembros de ToolStripLayoutStyle con la propiedad LayoutStyle.

Diseños de pila

El apilamiento es la organización de elementos situados junto a cada uno en ambos extremos de ToolStrip. En la lista siguiente se describen los diseños de pila.

Otras características de diseños de pila

Alignment determina el final del ToolStrip al que está alineado el elemento.

Cuando los elementos no caben dentro de ToolStrip, aparece automáticamente un botón de desbordamiento. El Overflow valor de la propiedad determina si un elemento aparece en el área de desbordamiento siempre, cuando sea necesario o nunca.

En el LayoutCompleted evento, puede inspeccionar la Placement propiedad para determinar si un elemento se ha colocado en la principal ToolStrip, el desbordamiento ToolStrip o si no se muestra en absoluto. Las razones típicas por las que no se muestra un elemento son que el elemento no cabe en el elemento principal ToolStrip y su Overflow propiedad se estableció en Never.

Haga que un ToolStrip sea móvil colocándolo en un ToolStripPanel y configurando su GripStyle a Visible.

Otras opciones de diseño

Las otras opciones de diseño son Flow y Table.

Diseño de flujo

Flow layout es el valor predeterminado para ContextMenuStrip, ToolStripDropDownMenuy ToolStripOverflow. Es similar a FlowLayoutPanel. Las características del Flow diseño son las siguientes:

Diseño de tabla

Table layout es el valor predeterminado para StatusStrip. Es similar a TableLayoutPanel. Las características del Flow diseño son las siguientes:

ToolStripItem

En los temas siguientes se describen ToolStripItem y los controles que derivan de él.

ToolStripItem es la clase base abstracta para todos los elementos que van en un ToolStrip. El siguiente modelo de objetos muestra la ToolStripItem jerarquía de herencia.

Diagrama que muestra el modelo de objetos ToolStripItem.

ToolStripItem Las clases heredan directamente de ToolStripItem, o heredan de manera indirecta de ToolStripItem a través de ToolStripControlHost o ToolStripDropDownItem.

ToolStripItemlos controles deben estar contenidos en un ToolStripMenuStrip, , StatusStripo ContextMenuStrip y no se pueden agregar directamente a un formulario. Las distintas clases de contenedor están diseñadas para contener un subconjunto adecuado de ToolStripItem controles.

En la tabla siguiente se enumeran los controles estándar ToolStripItem y los entornos en los que se ven mejor. Aunque cualquier ToolStrip elemento se puede alojar en cualquier ToolStripcontenedor derivado, estos elementos se diseñaron para verse mejor en los siguientes contenedores:

Nota:

ToolStripDropDown no aparece en el cuadro de herramientas del diseñador.

Elemento contenido Barra de herramientas MenuStrip ContextMenuStrip StatusStrip ToolStripDropDown
ToolStripButton No No No
ToolStripComboBox No
ToolStripSplitButton No No
ToolStripLabel No No
ToolStripSeparator No
ToolStripDropDownButton No No
ToolStripTextBox No
ToolStripMenuItem No No No
ToolStripStatusLabel No No No No
ToolStripProgressBar No No No
ToolStripControlHost No

Botón de barra de herramientas

ToolStripButton es el elemento de botón de ToolStrip. Puede mostrarlo con varios estilos de borde y puede usarlo para representar y activar estados operativos. También puede definirlo para que tenga el foco de forma predeterminada.

ToolStripLabel

ToolStripLabel proporciona funcionalidad de etiqueta en los controles ToolStrip. ToolStripLabel es como un ToolStripButton que no obtiene el foco de forma predeterminada y que no se muestra como presionado o resaltado.

ToolStripLabel como elemento hospedado admite claves de acceso.

Use LinkColor, LinkVisited, y LinkBehavior de ToolStripLabel para admitir el control de vínculo en ToolStrip.

ToolStripStatusLabel

ToolStripStatusLabel es una versión de ToolStripLabel diseñada específicamente para su uso en StatusStrip. Las características especiales incluyen BorderStyle, BorderSidesy Spring.

Separador de barra de herramientas

ToolStripSeparator agrega una línea vertical o horizontal a una barra de herramientas o menú, según la orientación. Proporciona agrupación o distinción entre elementos, como los de un menú.

Puede agregar un elemento ToolStripSeparator en tiempo de diseño eligiendolo en una lista desplegable. Sin embargo, también puede crear automáticamente un ToolStripSeparator escribiendo un guión (-) en el nodo de plantilla del diseñador o en el método Add.

ToolStripControlHost

ToolStripControlHost es la clase base abstracta para ToolStripComboBox, ToolStripTextBoxy ToolStripProgressBar. ToolStripControlHost puede hospedar otros controles, incluidos los controles personalizados, de dos maneras:

  • Construya un objeto ToolStripControlHost utilizando una clase que derive de Control. Para obtener acceso completo al control hospedado y las propiedades, debe volver a convertir la Control propiedad en la clase real que representa.

  • Extienda ToolStripControlHosty, en el constructor sin parámetros de la clase heredada, llame al constructor de clase base pasando una clase que deriva de Control. Esta opción le permite facilitar el acceso mediante la agrupación de propiedades y métodos de control comunes en un ToolStrip.

ToolStripComboBox

ToolStripComboBox es el ComboBox optimizado para hospedar en un ToolStrip. Un subconjunto de las propiedades y eventos del control hospedado se exponen en el ToolStripComboBox nivel, pero el control subyacente ComboBox es totalmente accesible a través de la ComboBox propiedad .

ToolStripTextBox

ToolStripTextBox es el TextBox optimizado para hospedar en un ToolStrip. Un subconjunto de las propiedades y eventos del control hospedado se exponen en el ToolStripTextBox nivel, pero el control subyacente TextBox es totalmente accesible a través de la TextBox propiedad .

ToolStripProgressBar

ToolStripProgressBar es el ProgressBar optimizado para hospedar en un ToolStrip. Un subconjunto de las propiedades y eventos del control hospedado se exponen en el ToolStripProgressBar nivel, pero el control subyacente ProgressBar es totalmente accesible a través de la ProgressBar propiedad .

ToolStripDropDownItem

ToolStripDropDownItem es la clase base abstracta para ToolStripMenuItem, ToolStripDropDownButtony ToolStripSplitButton, que puede hospedar elementos directamente o hospedar elementos adicionales en un contenedor desplegable. Para ello, establezca la propiedad DropDown en un ToolStripDropDown y establezca la propiedad Items del ToolStripDropDown. Acceda directamente a estos elementos desplegables a través de la propiedad DropDownItems.

ToolStripMenuItem

ToolStripMenuItem es un objeto ToolStripDropDownItem que funciona con ToolStripDropDownMenu y ContextMenuStrip para controlar el resaltado especial, el diseño y la disposición de columnas para los menús.

ToolStripDropDownButton

ToolStripDropDownButton parece a ToolStripButton, pero muestra un área desplegable cuando el usuario hace clic en este. Oculte o muestre la flecha desplegable estableciendo la ShowDropDownArrow propiedad . ToolStripDropDownButtonhospeda un ToolStripOverflowButton objeto que muestra los elementos que desbordan .ToolStrip

ToolStripSplitButton

ToolStripSplitButton combina la funcionalidad de botón y botón desplegable.

Utilice la DefaultItem propiedad para sincronizar el Click evento del elemento desplegable elegido con el elemento que se muestra en el botón.

Características genéricas de ToolStripItem

ToolStripItem proporciona las siguientes características y opciones genéricas para heredar controles:

  • Eventos principales

  • Manejo de imágenes

  • Alineación

  • Relación de texto e imagen

  • Estilo de presentación

Eventos principales

ToolStripItem los controles reciben sus propios eventos de clic, mouse y dibujo, y también pueden realizar algún preprocesamiento de teclado.

Manejo de imágenes

Las propiedades Image, ImageAlign, ImageIndex, ImageKey y ImageScaling pertenecen a varios aspectos del manejo de imágenes. Use imágenes en ToolStrip controles estableciendo estas propiedades directamente o estableciendo la propiedad ImageList solo en tiempo de ejecución.

El escalado de imágenes viene determinado por la interacción de las propiedades en ToolStrip y ToolStripItem, tal como se indica a continuación:

Alineación

El valor de la propiedad Alignment determina el final en el ToolStrip al cual aparece un elemento. La Alignment propiedad solo funciona cuando el estilo de diseño de ToolStrip se establece en uno de los valores de pila apilada.

Los elementos se colocan en el ToolStrip según el orden en que aparecen en la colección Items. Para cambiar mediante programación dónde se dispone un elemento, use el método Insert para mover el elemento en la colección. Este método mueve el elemento, pero no lo duplica.

Relación de texto e imagen

La TextImageRelation propiedad define la ubicación relativa de la imagen con respecto al texto de un ToolStripItem. Los elementos que carecen de una imagen, texto o ambos se tratan como casos especiales para que ToolStripItem no muestre un punto en blanco para los elementos o elementos que faltan.

Estilo de presentación

DisplayStyle permite establecer los valores de las propiedades Text e Image de un elemento mientras muestra solo lo que desea. Normalmente se usa para cambiar solo el estilo de presentación cuando se muestra el mismo elemento en un contexto diferente.

Clases de accesorios

Entre las clases que proporcionan otras funcionalidades se incluyen:

Consulte también