Controles personalizados (Windows Forms .NET)

Com o Windows Forms, você pode desenvolver e implementar novos controles. Você pode criar um novo controle de usuário, modificar controles existentes por meio de herança ou escrever um controle personalizado que faça sua própria pintura. Este artigo 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.

Importante

A documentação do Guia da Área de Trabalho para .NET 7 e .NET 6 está em construção.

Classe de controle de base

A Control classe é a classe base para controles do Windows Forms. Ele fornece a infraestrutura necessária para exibição visual em aplicativos do Windows Forms e fornece os seguintes recursos:

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

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

Crie seu próprio controle

Há três tipos de controles personalizados que você pode criar: controles de usuário, controles estendidos e controles personalizados. A tabela a seguir ajuda você a decidir qual tipo de controle você deve criar:

Se... Crie um ...
  • Você deseja combinar a funcionalidade de vários controles dos Windows Forms em uma única unidade reutilizável.
Crie um controle de usuário herdando de System.Windows.Forms.UserControl.
  • 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.
Estenda um controle herdando de um controle específico do Windows Forms.
  • 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 meio de controles padrão.
Crie um controle personalizado herdando de System.Windows.Forms.Control.

Controles de usuário

Um controle de usuário é uma coleção de controles do Windows Forms apresentados como um único controle para o consumidor. Esse tipo de controle é chamado de controle composto. Os controles contidos são chamados controles constituintes.

Um controle de usuário contém toda a funcionalidade inerente associada a cada um dos controles contidos do Windows Forms e permite que você exponha e vincule seletivamente suas propriedades. Um controle de usuário também fornece uma grande quantidade de funcionalidade de manipulação de teclado padrão sem nenhum esforço extra de desenvolvimento de sua parte.

Por exemplo, um controle de usuário pode ser criado para exibir dados de endereço do cliente de um banco de dados. Esse controle incluiria um DataGridView controle para exibir os campos de banco de dados, um BindingSource para manipular a vinculação a uma fonte de dados e um BindingNavigator controle para mover pelos registros. Você pode expor seletivamente propriedades de vinculação de dados e pode empacotar e reutilizar todo o controle de aplicativo para aplicativo.

Para obter mais informações, consulte Visão geral do controle de usuário.

Controles estendidos

Você pode derivar um controle herdado de qualquer controle Windows Forms existente. Com essa abordagem, você pode manter toda a funcionalidade inerente de um controle do Windows Forms e, em seguida, 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.

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 do controle ou interface gráfica.

Criar um controle herdando da Control classe requer 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 evento do controle, que controla OnPaint como o controle é desenhado visualmente. Você também deve escrever quaisquer comportamentos específicos de recursos para seu controle. 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 .

Experiência de design personalizada

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.

As informações a seguir estão desatualizadas, mas podem ajudá-lo.