Variedades de controles personalizados

Com o .NET Framework, você pode desenvolver e implementar novos controles. Você pode estender a funcionalidade do controle de usuário familiar, além dos controles existentes, por herança. Você também pode escrever controles personalizados que executam suas próprias pinturas.

Decidir qual tipo de controle criar pode ser confuso. Este tópico destaca as diferenças entre os vários tipos de controles dos quais você pode herdar e fornece informações sobre como escolher um tipo específico de controle para seu projeto.

Observação

Para obter informações sobre a criação de um controle para usar no Web Forms, consulte Desenvolvendo controles de servidores ASP.NET personalizados.

Classe de controle base

A Control classe é a classe base para controles do Windows Forms. Ela fornece a infraestrutura necessária para exibição visual em aplicativos Windows Forms.

A Control classe executa as seguintes tarefas para fornecer exibição visual em aplicativos do Windows Forms:

  • Expõe um identificador de janela.

  • Gerencia o roteamento de mensagens.

  • Fornece eventos de teclado e mouse, além de muitos outros eventos da interface do usuário.

  • Fornece recursos de layout avançados.

  • Contém muitas propriedades específicas para exibição visual, como ForeColor, BackColor, Heighte Width.

  • Fornece a segurança e o suporte a threading necessários para um controle dos Windows Forms atuar como um controle do Microsoft® ActiveX®.

Como grande parte da infraestrutura é fornecida pela classe base, é relativamente fácil desenvolver seus próprios controles do Windows Forms.

Tipos de controles

O Windows Forms dá suporte a três tipos de controles definidos pelo usuário: composição, estendido e personalizado. As seções a seguir descrevem cada tipo de controle e fornecem recomendações para escolher o tipo para usar em seus projetos.

Controles de composição

Um controle de composição é uma coleção de controles dos Windows Forms encapsulados em um contêiner comum. Esse tipo de controle é, às vezes, chamado de controle de usuário. Os controles contidos são chamados controles constituintes.

Um controle de composição contém todas as funcionalidades inerentes associadas a cada um dos controles dos Windows Forms contidos e permite que você exponha seletivamente e associe suas propriedades. Um controle de composição também é ideal para a funcionalidade de manipulação do teclado padrão sem nenhum esforço adicional de desenvolvimento de sua parte.

Por exemplo, um controle de composição poderia ser criado para exibir dados de endereço de cliente de um banco de dados. Esse controle pode incluir um controle para exibir os campos de banco de dados, um para manipular a vinculação a uma fonte de dados e um DataGridViewBindingSourceBindingNavigator controle para mover pelos registros. Você pode expor seletivamente propriedades de vinculação de dados, além de poder empacotar e reutilizar todo o controle do aplicativo para o aplicativo. Para obter um exemplo desse tipo de controle de composição, consulte Como aplicar atributos em controles dos Windows Forms.

Para criar um controle composto, derive da UserControl classe. A UserControl classe base fornece roteamento de teclado para controles filho e permite que os controles filho funcionem como um grupo. Para obter mais informações, consulte Desenvolvendo um controle composto do Windows Forms.

Recomendação

Herdar da UserControl classe se:

  • Você deseja combinar a funcionalidade de vários controles dos Windows Forms em uma única unidade reutilizável.

Controles estendidos

Você pode derivar um controle herdado de qualquer controle Windows Forms existente. Com essa abordagem, você pode reter todas as funcionalidades inerentes de um controle Windows Forms e estender essa funcionalidade adicionando propriedades personalizadas, métodos ou outros recursos. Com essa opção, você pode substituir a lógica de pintura do controle base e estender a interface do usuário alterando sua aparência.

Por exemplo, você pode criar um controle derivado do controle que controla Button quantas vezes um usuário clicou nele.

Em alguns controles, você também pode adicionar uma aparência personalizada à interface gráfica do usuário do seu controle substituindo o OnPaint método da classe base. Para um botão estendido que controla cliques, você pode substituir o OnPaint método para chamar a implementação base de , e, em seguida, desenhar a contagem de OnPaintcliques em um canto da área do cliente do Button controle.

Recomendação

Herde de um controle dos Windows Forms se:

  • A maioria da funcionalidade que você precisa já é idêntica a um controle Windows Forms existente.

  • Você não precisa de uma interface gráfica do usuário personalizada ou deseja criar uma nova interface gráfica do usuário para um controle existente.

Controles personalizados

Outra maneira de criar um controle é criar um substancialmente desde o início, herdando do Control. A Control classe fornece toda a funcionalidade básica exigida pelos controles, incluindo eventos de manipulação de mouse e teclado, mas nenhuma funcionalidade específica de controle ou interface gráfica.

Criar um controle herdando da Control classe requer muito mais pensamento e esforço do que herdar de ou um controle existente do UserControl Windows Forms. Como uma grande quantidade de implementação é deixada para você, o controle pode ter maior flexibilidade do que um controle de composição ou estendido e você pode personalizar o controle para atender às suas necessidades.

Para implementar um controle personalizado, você deve escrever código para o OnPaint evento do controle, bem como qualquer código específico de recurso necessário. Você também pode substituir o método e manipular mensagens do WndProc Windows diretamente. Essa é a maneira mais eficiente para criar um controle, mas, para usar essa técnica com eficiência, você precisa estar familiarizado com a API do Win32® da Microsoft.

Um exemplo de um controle personalizado é um controle de relógio que duplica a aparência e o comportamento de um relógio analógico. A pintura personalizada é invocada para fazer com que os ponteiros do relógio se movam em resposta a Tick eventos de um componente interno Timer . Para obter mais informações, consulte Como desenvolver um controle simples dos Windows Forms.

Recomendação

Herdar da Control classe se:

  • Você deseja fornecer uma representação gráfica personalizada do seu controle.

  • Você precisa implementar a funcionalidade personalizada que não está disponível por controles padrão.

Controles ActiveX

Embora a infraestrutura dos Windows Forms tenha sido otimizada para hospedar controles dos Windows Forms, você ainda poderá usar controles ActiveX. Há suporte para esta tarefa no Visual Studio. Para mais informações, consulte Como adicionar controles ActiveX ao Windows Forms.

Controles sem janelas

As tecnologias ActiveX e Microsoft Visual Basic® 6.0 dão suporte a controles sem janelas. Os controles sem janelas não têm suporte nos Windows Forms.

Experiência de design personalizado

Se você precisar implementar uma experiência de tempo de design personalizada, você poderá criar seu próprio designer. Para controles compostos, derive sua classe de designer personalizada das ParentControlDesigner classes ou .DocumentDesigner Para controles estendidos e personalizados, derive sua classe de designer personalizada da ControlDesigner classe.

Use o DesignerAttribute para associar seu controle ao seu designer. Para obter mais informações, consulte Estendendo o suporte em tempo de design e Como criar um controle dos Windows Forms que aproveita os recursos de tempo de design.

Confira também