Partilhar via


Classes base do Designer

Todos os designers de implementar a IDesigner interface, que define os métodos de interface básica do designer. A.NET Framework também fornece um conjunto de classes base de designer que fornecem métodos que podem ser úteis para os designers que oferecem suporte a tipos específicos de componentes ou controles.

Interface do IDesigner

Uma classe designer deve implementar a IDesigner interface, conforme mostrado no seguinte exemplo 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.
   ...
}

O Initialize o método de um IDesigner é chamado depois que o componente para o designer foi localizado e inicializado e o designer foi criado. Você pode substituir o Initialize método para realizar ações que devem ocorrer no componente ou o tempo de inicialização do designer. Você não pode substituir a inicialização do construtor do componente, mas você pode aumentá-la ou redefinir as propriedades que ele inicializa. O Component propriedade de um IDesigner é definida por meio deste método de inicialização. Você sempre deve chamar base.Initialize(component) de seu Initialize método se você substituir esse método. Você pode acessar o componente de um IDesigner de seu Component propriedade.

O Component propriedade fornece acesso para o componente que o designer está associado. Essa propriedade é definida quando o objeto designer é criado e seu Initialize método é chamado. O componente tem um site associado a ele e o designer pode usar este site para obter serviços de host do designer.

O DoDefaultAction método é chamado quando um componente ou controle é clicado duas vezes.

O Verbs propriedade pode ser substituída para retornar um DesignerVerbCollection que contém os objetos necessários para estender os itens de menu de um menu de atalho para um componente.

O Dispose método é chamado quando o objeto designer precisa ser destruído. Ele é chamado sempre que um componente é removido do recipiente de design.

Classe base do Designer de componentes

O ComponentDesigner classe implementa o IDesigner e IDesignerFilter interfaces para oferecer métodos adicionais que podem ser úteis para alguns designers de componentes.

Classe base do Designer para controles Windows Forms

A classe base de designer para controles Windows Forms é ControlDesigner. Essa classe deriva da ComponentDesigner e fornece métodos adicionais úteis para personalizar a aparência e comportamento de um controle Windows Forms. Para uma implementação de exemplo de um designer de formulários do Windows, consulte Como: Implementar um Designer para um controle.

O DocumentDesigner classe fornece um base designer para estender o comportamento de modo de design do e fornecendo um modo de exibição do modo de design de nível de raiz, um Control que oferece suporte a controles aninhados e recebe mensagens de rolagem. Para obter mais informações, consulte Como: Criar um controle Windows Forms que tira proveito dos recursos de tempo de Design.

ObservaçãoObservação

Você deve adicionar uma referência ao assembly de tempo de design, System.Design.dll. Este assembly não está incluído na.NET Framework 4 o perfil do cliente. Para adicionar uma referência a System.Design.dll, você deve alterar a estrutura do projeto de destino para .NET Framework 4.

Classe do Designer de base para o ASP.NET por programação

A classe base designer para ASP.Controles de servidor de rede é ControlDesigner. Essa classe fornece a funcionalidade básica para o processamento de HTML de tempo de design personalizado.

Classes base para integração em tempo de Design

O TypeConverter classe fornece uma classe base para converter um tipo e para uma representação de texto. Para obter mais informações sobre conversores de tipo, consulte Como: Implementar um conversor de tipo ou Conversão de tipo generalizada.

O UITypeEditor classe fornece uma classe base que você pode derivar e estender para implementar um editor de tipo personalizado para o ambiente de tempo de design. Para obter mais informações sobre como implementar um UITypeEditor, consulte Visão geral editores de tipo de Interface do usuário.

Classes base para o comportamento e aparência do Designer

O Behavior classe pode ser estendido para desenvolver qualquer tipo de comportamento da interface do usuário, incluindo a seleção, arraste e comportamentos de redimensionamento. Pintura e teste de impacto são realizadas pela Glyph classe.

Para obter mais informações, consulte Visão geral do serviço de comportamento.

ObservaçãoObservação

Você deve adicionar uma referência ao assembly de tempo de design, System.Design.dll. Este assembly não está incluído na.NET Framework 4 o perfil do cliente. Para adicionar uma referência a System.Design.dll, você deve alterar a estrutura do projeto de destino para .NET Framework 4.

Classes base para carregadores de Designer

O BasicDesignerLoader classe fornece uma implementação de IDesignerLoaderService interface. A BasicDesignerLoader é uma implementação completa de um carregador de designer sem nada relacionado a um formato de persistência.

CodeDomDesignerLoaderuma classe abstrata que fornece um carregador de designer completo baseia o modelo de objeto de documento de código (CodeDOM).

Classes base para o Designer de serialização

O CodeDomSerializerBase classe fornece uma classe base para CodeDomSerializer classes. O CodeDomSerializerBase classe é usada como uma base compartilhada entre o CodeDomSerializer e TypeCodeDomSerializer classes.

O DesignerSerializationManager classe fornece uma implementação de IDesignerSerializationManager interface.

Para obter mais informações, consulte Designer Serialization Overview.

Classe base para as marcas inteligentes

O DesignerActionList classe fornece a classe base para tipos que definem uma lista de itens usados para criar um painel de marca inteligente. Para obter mais informações, consulte Como: Anexar marcas inteligentes para um componente do Windows Forms.

ObservaçãoObservação

Você deve adicionar uma referência ao assembly de tempo de design, System.Design.dll. Este assembly não está incluído na.NET Framework 4 o perfil do cliente. Para adicionar uma referência a System.Design.dll, você deve alterar a estrutura do projeto de destino para .NET Framework 4.

Classe base para o Layout personalizado

O LayoutEngine classe fornece a classe base para implementar mecanismos de layout. O TableLayoutPanel e FlowLayoutPanel controla o uso de LayoutEngine classe para fornecer o comportamento de layout. Para obter mais informações, consulte Como: Implementar um mecanismo de Layout personalizada.

Designers padrão

O Windows Software Development Kit (SDK) fornece um conjunto de designers para oferecer suporte a tipos específicos de componentes. Esses designers nomeadas de acordo com os componentes de design, com a palavra Designer sufixado. Por exemplo, o designer para o System.Windows.Forms.Control é a classe System.Windows.Forms.Design.ControlDesigner.

Funcionalidade comum de Designer

Acessando os serviços de tempo de Design a partir de um Designer

A maioria dos tipos de serviços de tempo de design pode ser solicitado através de um GetService método passando o tipo do serviço a solicitação. Há um GetService método em Component e ComponentDesigner. Há também um GetService método em IServiceProvider, implementada pelo ISite retornado pela Site propriedade de um IComponent situados no modo de design.

O código a seguir mostra como obter um IDesignerHost interface de serviço e um IMenuCommandService usando um GetService método.

Para obter mais informações, consulte Como: Acessar os serviços de tempo de Design.

O código a seguir demonstra como obter um serviço a partir de uma interface de provedor de serviço de modo de design.

' 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));

Acessando os componentes de projeto a partir de um Designer

Um designer pode obter acesso aos componentes dentro de um documento de modo de design, acessando o Components coleção da Container propriedade de um IDesignerHost interface de serviço. O exemplo de código a seguir mostra como acessar os componentes no projeto atual modo de design.

' 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.

Assim que tiver acesso à coleção de componentes, você pode usar TypeDescriptor métodos e PropertyDescriptor objetos para identificar tipos e defina os valores das propriedades dos componentes. Você também pode criar componentes usando o CreateComponent método de IDesignerHost interface.

Estendendo um Designer.

Quando você derivar de um componente que tem um designer associado, o designer da classe base é associado ao componente derivado por padrão. Você pode associar um designer diferente seu componente aplicando um DesignerAttribute atributo que especifica o tipo de designer para associar o componente. É comum para um componente derivado para que um designer que estende o designer de base.

Para obter mais informações, consulte Como: Implementar um Designer para um controle.

Para estender um designer.

  1. Defina uma classe que deriva da classe base designer.

  2. Associar a nova classe designer seu componente aplicando um DesignerAttribute.

O exemplo de código a seguir define um designer que estende System.Web.UI.Design.WebControls.LabelDesigner e o associa com uma etiqueta personalizada que estende 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 {}
}
ObservaçãoObservação

Se você estiver definindo um designer para uma classe que está lacrado, ou se não quiser que outras classes de usar ou herdar seu designer, você pode fazer sua classe designer interno ao seu assembly. O host de designer ainda será possível criar uma instância do seu designer, mas não contribuirá para o modelo de objeto público.

Consulte também

Tarefas

Como: Acessar os serviços de tempo de Design

Como: Suporte de tempo de Design de acesso no Windows Forms

Conceitos

A filtragem de metadados

Verbos do Designer

Como: Implementar um Designer para um controle

Outros recursos

Designers personalizados