Compartilhar via


Classes base do Designer

Todos os designers implementam o IDesigner interface que define os métodos de interface básica de designer. O .NET estrutura também fornece um conjunto de classes base 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 o IDesigner interface, sistema autônomo neste 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.
   ...
}

The Initialize 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 time de inicialização do designer. Não é possível substituir a inicialização do construtor do componente, mas você pode ampliar a ele ou reiniciar as propriedades que ele inicializa.The Component propriedade de um IDesigner é definida por meio desse método de inicialização. Você sempre deve chamar base.Initialize(component) do seu Initialize método se você substituir este método. Você pode acessar o componente de um IDesigner do seu Component propriedade.

The Component propriedade fornece acesso para o componente que o designer está associado. Esta propriedade é o conjunto quando o objeto designer é criado pela primeira vez e o seu Initialize método é chamado. O componente tem um site associado a ele e o designer pode usar esse site para obter serviços de host do designer.

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

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

The Dispose método é chamado quando o objeto designer precisa ser destruído. Ele é chamado sempre que um componente é removido do contêiner de design.

Base classe Designer para componentes

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

Base classe Designer para controles Windows Forms

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

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

Base classe Designer para controles de servidor ASP.NET

A classe designer base para controles de servidor ASP.NET é ControlDesigner. Essa classe fornece a funcionalidade básica para renderização de HTML do time de design personalizado.Outras classes base para tarefas sistema autônomo a edição do modelo são descritos em Suporte ao Design-Time para páginas da Web ASP.NET.

Classes base para time de design de integração

The TypeConverter classe fornece uma classe base para a conversão de 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 tipo ou Conversão de tipo generalizado.

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

Classes base para o Designer aparência e comportamento

The Behavior classe pode ser estendido para qualquer tipo de comportamento da interface de usuário, inclusive a seleção, arrastar, desenvolver e redimensionar comportamentos. Pintura e teste de hit realizadas pelo Glyph classe.

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

Classes base para carregadores de Designer

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

CodeDomDesignerLoader uma classe abstrata que fornece um carregador de designer completo se baseia o Code documento objeto modelo (Code Model, CodeDOM).

Classes base para a serialização de Designer

The CodeDomSerializerBase classe fornece uma classe base para CodeDomSerializer classes. The CodeDomSerializerBase classe é usada sistema autônomo uma base compartilhada entre o CodeDomSerializer e TypeCodeDomSerializer classes.

The DesignerSerializationManager classe fornece uma implementação das IDesignerSerializationManager interface.

Para obter mais informações, consulte Designer serialização visão geral.

Classe base para SMART Rótulos

The DesignerActionList classe fornece a classe base para tipos que definem uma lista de itens usado para criar um painel de marcas inteligentes. Para obter mais informações, consulte Como: Anexar SMART Rótulos a um componente do Windows Forms.

Classe base para o layout personalizado

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

Designers padrão

The 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 sufixado.Por exemplo, o designer para o System.Windows.Forms.Control classe é System.Windows.Forms.Design.ControlDesigner.

Funcionalidade comum de Designer

Acessando serviços em time de design a partir de um designer

A maioria dos tipos de serviços de time de design pode ser solicitado através de um GetService método passando o tipo de serviço para solicitar. Há um GetService método em Component e ComponentDesigner. Há também um GetService método em IServiceProvider, que é implementada pela ISite retornado pela Site propriedade de um IComponent localizado 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: Serviços de time de design de acesso.

O código a seguir demonstra como obter um serviço de uma interface de provedor do 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));

Acessar componentes de projeto de um designer

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

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

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

Estendendo um designer

Quando você derivar de um componente que tem um designer associado, o designer da classe base está 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 tenha 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 associa um rótulo personalizado 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ção:

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

Consulte também

Tarefas

Como: Serviços de time de design de acesso

Como: Suporte ao time de design de acesso no Windows Forms

Conceitos

Filtragem de metadados

Verbos do Designer

Como: Implementar um designer para um controle

Outros recursos

Designers personalizados

Suporte ao Design-Time para páginas da Web ASP.NET