Comandos del diseñador y modelo de objetos de DesignerAction para formularios Windows Forms

Los comandos del diseñador y el modelo de objetos de DesignerAction proporcionan una forma generalizada para el usuario con el fin de especificar un conjunto de acciones para un componente en tiempo de diseño. De esta forma, los usuarios tienen acceso a estas acciones desde la superficie del diseñador, normalmente haciendo clic en el glifo de etiqueta inteligente de un componente (Glifo de etiqueta inteligente) y seleccionando una de las acciones que se ofrecen en el panel de etiquetas inteligentes. Este modelo unifica las distintas maneras mediante las cuales un diseñador puede ofrecer comandos a usuarios.

Etiquetas inteligentes

La característica de etiqueta inteligente permite a componentes y controles mostrar información contextual y comandos a los usuarios. La etiqueta inteligente se puede concebir para sustituir a verbos del diseñador, ya que es posible elegir mostrar un elemento de etiqueta inteligente en el panel de etiquetas inteligentes y, además, en el menú contextual asociado a un componente o control.

Para obtener un ejemplo completo de cómo se pueden implementar etiquetas inteligentes, vea Cómo: Asociar etiquetas inteligentes a un componente de formularios Windows Forms.

Clases de comandos del diseñador

En la siguiente tabla se describen las diferentes maneras en las que se exponen los comandos del diseñador cuando se están desarrollando componentes y controles.

Clase

Descripción

MenuCommand

Delegado adjunto a un identificador de comando. Dicho delegado no define el texto de comando, ni su posición ni otros metadatos.

DesignerVerb

Comando de menú que también define su texto y otros metadatos. Por lo general, los verbos se proporcionan en una base por-diseñador y son específicos para el diseñador en cuestión. Normalmente, los verbos del diseñador se muestran en un menú contextual o en el menú Ver de la barra de menú principal.

DesignerActionItem

Comando de menú que define el texto y otros metadatos para describir una acción concreta que se puede realizar. Las acciones, habitualmente, conducen al usuario a través de un proceso de varios pasos, como la configuración de un origen de datos para un componente.

Modelos de inserción y de extracción

En la siguiente tabla se muestran los dos modelos para tener acceso mediante programación a los comandos del diseñador.

Modelo

Descripción

Inserción

Un diseñador solicita específicamente un servicio y agrega comandos a ese servicio.

Extracción

Un servicio solicita a un diseñador los comandos que ofrece.

Unificar comandos existentes

Los tipos de comandos que aparecen en la tabla anterior de clases de comandos del diseñador tienen mucho en común. La API DesignerAction tiene cabida a todos estos comandos juntos con el fin de presentar un modelo uniforme para exponer comandos a los usuarios de un diseñador.

Nota

No todos los diseñadores son compatibles con todos los modelos. Un diseñador puede consultar qué tipo de compatibilidad se ofrece y en respuesta puede que haya algún cambio en la forma de ofrecer comandos. Además, es posible que no se puedan admitir ambos modelos de inserción y de extracción para todos los tipos de comandos. No todos los diseñadores ofrecerán las acciones del diseñador como etiquetas inteligentes. Por ejemplo, puede que algunos diseñadores expongan las acciones del diseñador en una ventana de herramientas.

Modelo de objetos DesignerAction

En la siguiente tabla siguiente se describen las clases importantes que implementan el modelo de objetos DesignerAction.

Clase

Descripción

DesignerActionItem

Representa un elemento de panel en un panel de etiquetas inteligentes.

DesignerActionList

Define una lista de elementos utilizada para crear un panel de etiquetas inteligentes.

DesignerActionService

Establece un servicio en tiempo de diseño que administra la colección de objetos DesignerActionItem para componentes.

DesignerActionTextItem

Representa un elemento de texto estático en un panel. Se deriva de DesignerActionItem.

DesignerActionPropertyItem

Representa un elemento de panel asociado a una propiedad en una clase que se deriva de DesignerActionList. Se deriva de DesignerActionItem.

DesignerActionMethodItem

Representa un elemento de panel asociado a un método en una clase que se deriva de DesignerActionList. Se deriva de DesignerActionItem.

DesignerActionHeaderItem

Representa un elemento de encabezado estático en un panel de etiquetas inteligentes. Se deriva de DesignerActionTextItem.

Utilizar el modelo de objetos DesignerAction

Con el fin de habilitar acciones del diseñador para un determinado componente o control, derive de la clase base DesignerActionList. Utilice esta clase derivada para rellenar un panel de etiquetas inteligentes, que representa la interfaz de usuario como menú.

La clase derivada puede reemplazar el método virtual GetSortedActionItems con el fin de devolver una colección de objetos derivada de DesignerActionItem. Estos objetos representan los elementos de panel. Cada elemento se muestra en el panel según su tipo. Por ejemplo, un objeto DesignerActionTextItem aparece como una etiqueta de texto estático. Los elementos de panel activos, representados por los tipos DesignerActionPropertyItem y DesignerActionMethodItem, cuentan con su correspondiente método o propiedad, que implementa la funcionalidad para el elemento en cuestión, y que son accesibles de forma pública.

Cuando se crea la correspondiente clase derivada, es posible agregarla a un control de dos maneras:

  • Con el modelo de extracción, se agrega una instancia de la clase derivada en cuestión a la propiedad ActionLists en la clase ComponentDesigner. Esto ofrece a las clases heredadas una forma de proporcionar otra lista de acciones y a sus elementos una forma de para poder combinarse.

  • Con el modelo de la inserción, llama a Add para agregar una instancia de su correspondiente clase derivada a la colección mantenida por el DesignerActionService global. Estas listas de acciones se combinarán con aquéllos en la colección mantenida por ComponentDesigner.

DesignerActionPropertyItem aparece representado en el diseñador por su UITypeEditorcorrespondiente. DesignerActionMethodItem aparece representado en el diseñador por un elemento de interfaz de usuario activo, como un hipervínculo, que invoca a un método proporcionado por el programador. La implementación de la lista de acciones del método GetSortedActionItems devuelve las propiedades y los métodos en el orden en el que se deberían mostrar en el panel de etiquetas inteligentes.

Para obtener un ejemplo completo sobre cómo implementar etiquetas inteligentes, consulte el tema Cómo: Asociar etiquetas inteligentes a un componente de formularios Windows Forms.

Verbos existentes en listas de acciones

Los controles y componentes con implementaciones DesignerVerb existentes automáticamente reciben la compatibilidad DesignerActionList. El entorno de diseño solicita una lista de acciones al diseñador de un componente y si no hay ninguno que esté disponible, se crea uno para los verbos existentes.

Elementos de la lista de acciones en el menú contextual

Si se desea que un elemento aparezca tanto en el menú contextual como en una lista de acciones, es posible especificar el marcadorIncludeAsDesignerVerb en DesignerActionMethodItem.

Cuando se llama a Add, la lista de acciones se digitaliza para cualquier DesignerActionMethodItem con el marcador IncludeAsDesignerVerb establecido. Si aparece establecido, se llamará al método AddVerb para que ese elemento lo agregue a los verbos de los componentes y, por tanto, a su menú contextual.

Cambios en los tipos de comandos del diseñador

Las clases MenuCommand y DesignerVerb de la versión 1.1 de .NET Framework se han cambiado ligeramente para admitir el modelo de objetos de DesignerAction. Ambos tipos ahora exponen una nueva propiedad denominada Properties, que es una IDictionary que almacena todas las propiedades públicas para el objeto de comando. La clave de diccionario corresponde al nombre de la propiedad pública. Esto hace posible la enumeración genérica de propiedades y proporciona una base coherente a partir de la cual se pueden agregar nuevas propiedades sin modificar la definición de clase.

Además, la clase MenuCommandService proporciona una implementación estándar de IMenuCommandService y lleva a cabo la correcta integración del verbo. Esta clase provoca eventos que notifican adiciones y eliminaciones a comandos. Con esta clase, se puede crear una Interfaz de usuario basada en los resultados de estos eventos. MenuCommandService, así como IMenuCommandService, se encuentran disponibles en el contenedor de servicios.

Vea también

Tareas

Cómo: Asociar etiquetas inteligentes a un componente de formularios Windows Forms

Referencia

DesignerActionList

ComponentDesigner

DesignerVerb

MenuCommand

MenuCommandService

Otros recursos

Ampliar compatibilidad en tiempo de diseño