Clases base del diseñador
Todos los diseñadores implementan la interfaz IDesigner, que define los métodos de interfaz básica de diseñador..NET Framework también proporciona un conjunto de clases base de diseñador que proporcionan métodos que pueden resultar útiles para diseñadores que admiten tipos específicos de componentes o controles.
Interfaz IDesigner
Una clase de diseñador debe implementar la interfaz IDesigner, tal y como se muestra en el siguiente ejemplo de código.
Public Interface IDesigner
Sub Dispose()
Sub Initialize(component As IComponent)
' Other methods.
...
ReadOnly Property Component() As IComponent
' Other properties.
...
End Interface
public interface IDesigner {
void Dispose();
void Initialize(IComponent component);
// Other methods.
...
IComponent Component {
get;
}
// Other properties.
...
}
Se llama al método Initialize de la interfaz IDesigner después de que se haya ubicado e inicializado el componente para el diseñador, y se haya creado el diseñador.Se puede reemplazar el método Initialize para realizar acciones que deberían ocurrir en el tiempo de inicialización del componente o del diseñador.No se puede reemplazar la inicialización del constructor del componente, pero se puede aumentar o restablecer las propiedades que éste inicializa.La propiedad Component de IDesigner se establece mediante este método de inicialización.Siempre se debería llamar al base.Initialize(component) desde el método Initialize si se reemplaza este método.Se puede tener acceso al componente de una IDesigner desde su propiedad Component.
La propiedad Component proporciona acceso al componente al que está asociado el diseñador.Esta propiedad se establece cuando se crea el objeto del diseñador por primera vez y se llama a su método Initialize.El componente tiene un sitio asociado y el diseñador puede utilizar este sitio para obtener servicios del host del diseñador.
Se llama al método DoDefaultAction cuando se hace clic doble sobre un componente o control.
La propiedad Verbs se puede reemplazar para devolver una DesignerVerbCollection que contenga los objetos necesarios para ampliar los elementos de menú de un menú contextual para un componente.
Cuando es necesario destruir el objeto de diseñador, se llama al método Dispose.Se llama a este método siempre que se quita un componente del contenedor de diseño.
Clase base de diseñador para componentes
La clase ComponentDesigner implementa las interfaces IDesigner y IDesignerFilter para proporcionar métodos adicionales que pueden ser útiles para algunos diseñadores de componentes.
Clase base de diseñador para los controles de formularios Windows Forms
La clase de diseñador base para los controles de formularios Windows Forms es ControlDesigner.Esta clase se deriva de ComponentDesigner y proporciona métodos adicionales útiles para personalizar la apariencia y el comportamiento de un control de formularios Windows Forms.Para una implementación de ejemplo de un diseñador de Windows Forms, vea Cómo: Implementar un diseñador para un control.
La clase DocumentDesigner proporciona un diseñador base para ampliar el comportamiento en modo de diseño de Control que es compatible con controles anidados y recibe mensajes de desplazamiento, así como para proporcionarle una vista en modo de diseño de nivel raíz.Para obtener más información, vea Cómo: Crear un control de formularios Windows Forms que aproveche las características en tiempo de diseño.
[!NOTA]
Debe agregar una referencia al ensamblado en tiempo de diseño, System.Design.dll.Este ensamblado no está incluido en .NET Framework 4 Client Profile.Para agregar una referencia a System.Design.dll, debe cambiar la versión de .NET Framework de destino del proyecto a .NET Framework 4.
Clase base de diseñador para los controles de servidor ASP.NET
La clase de diseñador base para los controles de servidor ASP.NET es ControlDesigner.Esta clase proporciona la funcionalidad básica para representar HTML personalizado en tiempo de diseño.
Clases base para la integración en tiempo de diseño
La clase TypeConverter proporciona una clase base para convertir un tipo a y de una representación de texto.Para obtener más información sobre los convertidores de tipos, vea Cómo: Implementar un convertidor de tipos o Conversión de tipos generalizada.
La clase UITypeEditor proporciona una clase base que se puede derivar de y se extiende para implementar un editor de tipos personalizado para el entorno en tiempo de diseño.Para obtener más información sobre la implementación de UITypeEditor, vea Información general sobre editores de tipos de interfaz de usuario.
Clases base para el comportamiento y la apariencia del diseñador
La clase Behavior se puede extender para desarrollar cualquier tipo de comportamiento de interfaz de usuario, incluidos los comportamiento de selección, arrastre y cambio de tamaño.La clase Glyph realiza funciones de pintura y comprobación de visitas.
Para obtener más información, vea Información general sobre servicios de comportamiento.
[!NOTA]
Debe agregar una referencia al ensamblado en tiempo de diseño, System.Design.dll.Este ensamblado no está incluido en .NET Framework 4 Client Profile.Para agregar una referencia a System.Design.dll, debe cambiar la versión de .NET Framework de destino del proyecto a .NET Framework 4.
Clases base para cargadores de diseñadores
La clase BasicDesignerLoader proporciona una implementación de la interfaz IDesignerLoaderService.Un BasicDesignerLoader es una implementación completa de un cargador de diseñadores sin nada relacionando con un formato de persistencia.
CodeDomDesignerLoader es una clase abstracta que proporciona un cargador de diseñadores completo basado en (CodeDOM).
Clases base para la serialización de diseñadores
La clase CodeDomSerializerBase proporciona una clase base para las clases CodeDomSerializer.La clase CodeDomSerializerBase se utiliza como una base compartida entre las clases CodeDomSerializer y TypeCodeDomSerializer.
La clase DesignerSerializationManager proporciona una implementación de la interfaz IDesignerSerializationManager.
Para obtener más información, vea Información general sobre serialización de diseñadores.
Clase base para etiquetas inteligentes
La clase DesignerActionList proporciona la clase base para tipos que definen una lista de elementos utilizada para crear un panel de etiquetas inteligentes.Para obtener más información, vea Cómo: Asociar etiquetas inteligentes a un componente de formularios Windows Forms.
[!NOTA]
Debe agregar una referencia al ensamblado en tiempo de diseño, System.Design.dll.Este ensamblado no está incluido en .NET Framework 4 Client Profile.Para agregar una referencia a System.Design.dll, debe cambiar la versión de .NET Framework de destino del proyecto a .NET Framework 4.
Clase base para diseño personalizado
La clase LayoutEngine proporciona la clase base para implementar motores de diseño.Los controles TableLayoutPanel y FlowLayoutPanel utilizan la clase LayoutEngine para proporcionar el comportamiento de diseño.Para obtener más información, vea Cómo: Implementar un motor de diseño personalizado.
Diseñadores estándar
Kit de desarrollo de software de Windows (SDK) proporciona un conjunto de diseñadores que admiten tipos específicos de componentes.A estos diseñadores se les denomina conforme a los componentes que diseñan, con la palabra Designercomo sufijo.Por ejemplo, el diseñador para la clase System.Windows.Forms.Control es System.Windows.Forms.Design.ControlDesigner.
Funcionalidad de diseñador común
Tener acceso a servicios en tiempo de diseño desde un diseñador
La mayoría de servicios en tiempo de diseño se pueden solicitar mediante un método GetService al pasar el tipo de servicio que se va a solicitar.Hay un método GetService en Component y ComponentDesigner.También existe un método GetService en IServiceProvider, implementado por el ISite devuelto por la propiedad Site de un IComponent en modo de diseño.
El código siguiente muestra cómo obtener una interfaz de servicio IDesignerHost y una interfaz IMenuCommandService utilizando un método GetService.
Para obtener más información, consulte Cómo: Obtener acceso a servicios en tiempo de diseño.
El siguiente código muestra cómo obtener un servicio desde una interfaz de proveedor de servicios en modo de diseño.
' Obtain an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Obtain an IMenuCommandService service.
Dim mcs As IMenuCommandService = CType(Me.Component.Site.GetService(GetType(IMenuCommandService)), IMenuCommandService)
// Obtain an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Obtain an IMenuCommandService service.
IMenuCommandService mcs =
(IMenuCommandService)this.Component.Site.GetService(typeof(IMenuCommandService));
Tener acceso a componentes de proyecto desde un diseñador
Un diseñador puede obtener acceso a los componentes en un documento en modo de diseño al tener acceso a la colección Components de la propiedad Container de una interfaz de servicio IDesignerHost.En el siguiente ejemplo de código se muestra cómo tener acceso a los componentes en el proyecto actual de modo de diseño.
' Obtains an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Gets the components container for the current design-time project.
Dim container As IContainer = host.Container
' The host.Container IContainer contains each IComponent in the project.
// Obtains an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Gets the components container for the current design-time project.
IContainer container = host.Container;
// The host.Container IContainer contains each IComponent in the project.
Una vez que se obtiene acceso a la colección de componentes, se pueden utilizar métodos TypeDescriptor y objetos PropertyDescriptor para identificar tipos y establecer los valores de propiedades de componentes.También se pueden crear componentes mediante el método CreateComponent de la interfaz IDesignerHost.
Extender un diseñador
Cuando se deriva un componente que tiene un diseñador asociado, el diseñador de la clase base se asocia al componente derivado de manera predeterminada.Para asociar un diseñador distinto al componente, aplique un atributo DesignerAttribute que especifique el tipo de diseñador al que asociar el componente.Es normal que un componente derivado tenga un diseñador que extienda el diseñador base.
Para obtener más información, vea Cómo: Implementar un diseñador para un control.
Para extender un diseñador
Defina una clase que se derive de la clase base de diseñador.
Asocie la nueva clase del diseñador al componente mediante la aplicación de un DesignerAttribute.
En el siguiente ejemplo de código se define un diseñador que extiende System.Web.UI.Design.WebControls.LabelDesigner y lo asocia a una etiqueta personalizada que extiende System.Web.UI.WebControls.Label.
Namespace MyControls.Design
Public Class MyLabelDesigner
Inherits System.Web.UI.Design.WebControls.LabelDesigner
End Class
End Namespace
Namespace MyControls
<Designer(GetType(MyControls.Design.MyLabelDesigner))> _
Public Class MyLabel
Inherits System.Web.UI.WebControls.Label
End Class
End Namespace
namespace MyControls.Design {
public class MyLabelDesigner : System.Web.UI.Design.WebControls.LabelDesigner {}
}
namespace MyControls {
[Designer(typeof(MyControls.Design.MyLabelDesigner))]
public class MyLabel : System.Web.UI.WebControls.Label {}
}
[!NOTA]
Si va a definir un diseñador para una clase sellada o si no desea que otras clases utilicen su diseñador o hereden de éste, es posible hacer que la clase del diseñador sea interna para el ensamblado.El host del diseñador todavía podrá crear una instancia del diseñador, aunque no la aportará al modelo de objetos públicos.
Vea también
Tareas
Cómo: Obtener acceso a servicios en tiempo de diseño
Cómo: Obtener acceso a las funciones en tiempo de diseño de formularios Windows Forms
Conceptos
Cómo: Implementar un diseñador para un control