Compartilhar via


Classes de designer base

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 IDesigner

Uma classe designer deve implementar a IDesigner interface, conforme mostrado no exemplo de código a seguir.

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 executar 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 desse 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 sua 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 de 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 designer de base 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 ofereça suporte a controles aninhados e recebe mensagens de rolagem. Para obter mais informações, consulte Como criar um controle do Windows Forms que aproveita recursos de tempo de design.

Dica

Você deve adicionar uma referência ao assembly em 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 do Designer para aplicativos ASP.NET por programação

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

Classes base para integração de tempo de Design

O TypeConverter classe fornece uma classe base para converter um tipo de e para uma representação de texto. Para obter mais informações sobre conversores de tipo, consulte Como implementar um conversor de tipos ou Conversão de tipos 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 dos editores de tipos da interface do usuário.

Classes base para a aparência do Designer e o comportamento

O Behavior classe pode ser estendido para desenvolver qualquer tipo de comportamento da interface do usuário, incluindo a seleção, arraste e redimensionar comportamentos. 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.

Dica

Você deve adicionar uma referência ao assembly em 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.

CodeDomDesignerLoaderé uma classe abstrata que fornece um carregador de designer completo baseada no 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 Visão geral da serialização de designer.

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 a um componente do Windows Forms.

Dica

Você deve adicionar uma referência ao assembly em 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 controles usam o LayoutEngine classe para fornecer o comportamento de layout. Para obter mais informações, consulte Como implementar um mecanismo de layout personalizado.

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 como sufixo. Por exemplo, o designer para o Control é a classe 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 podem ser solicitados por meio de um GetService método passando o tipo do serviço para solicitar. There is a GetService method on Component and ComponentDesigner. Há também um GetService método em IServiceProvider, que é implementada pela 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 serviços em 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 definir os valores das propriedades de componentes. Você também pode criar componentes usando o CreateComponent método da IDesignerHost interface.

Estendendo um Designer

Quando você derivar de um componente que tem um designer associado, o designer da classe base é associado com o componente derivado por padrão. Você pode associar um designer diferente com seu componente aplicando um DesignerAttribute atributo que especifica o tipo de designer para associar ao 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 LabelDesigner e a associa uma etiqueta personalizada que estende 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 {}
}

Dica

Se você estiver definindo um designer para uma classe que está lacrado, ou se você não quiser que outras classes para usar ou herdar seu designer, você pode tornar 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ão para o modelo de objeto público.

Consulte também

Tarefas

Como acessar serviços em tempo de design

Como acessar o suporte para tempo de design no Windows Forms

Conceitos

Filtragem de metadados

Verbos do designer

Como implementar um designer para um controle

Outros recursos

Designers personalizados