C# - Criando Controles Personalizados (User Control)


 Neste artigo veremos como podemos criar controles personalizadas na linguagem C#.

Quando você está desenvolvendo o seu programa Window Forms, o designer do formulário é onde você organiza seus controles e decide qual a aparência deseja dar a eles. Existe também um designer para controles de usuário, o User Control Designer, que permite que você decida como será o controle de usuário.

Criar controles personalizados com C# é tão fácil como criar uma classe. Você simplesmente utiliza a herança para herdar de um controle já existente e adiciona as características desejadas ao seu controle. Além disto você pode também criar uma classe de controle customizado (User Control) como parte do projeto existente e então mais tarde colocá-la em uma assembly separado que pode ser compartilhado com outros programadores.

Podemos fazer distinção entre três tipos de controles personalizados :

  1. Controles de Usuários - Users Controls : São os tipos mais simples de controles. Eles herdam da classe System.Windows.Forms.UserControl e seguem o modelo da composição.
  2. Controles herdados - Inherited Controls : São controles com mais recursos ; Para criá-los você escolhe um controle que mais se aproxima de suas características e então deriva uma classe personalizada que sobrescreve ou inclui propriedades e métodos.
  3. Controles Criados - São controles criados usando as rotinas da GDI+ e que geram toda a interface com o usuário; geralmente  tendem a herdar da classe System.Windows.Forms.Control.

Controles de Usuário - User Controls

Um controle de usuário é semelhante a qualquer outra classe, mas com a capacidade adicional de ser colocado na caixa de ferramentas e ser exibido em um formulário. Onde um módulo de classe possui apenas código, um módulo de controle de usuário possui código e um designer. O User Control Designer é semelhante a um designer de formulários - possui propriedades para controlar a aparência e o comportamento do controle do usuário.

Os controles de usuário são o tipo mais comum de projeto , e embora sejam simples de criar possuem algumas limitações :

  1. Tendem a combinar a regra de negócios com a interface de usuário.

  2. Tendem a esconder todas as propriedades e métodos de seus controles filhos.

Como exemplo vamos criar um controle de usuário que exiba a relação dos estados brasileiros combinando os controles Label e Combobox.
 

Recursos Usados :

Criando o seu primeiro controle de usuário - User Control

Vamos então criar um controle de usuário (User Control) bem simples mostrando as etapas da sua criação.

Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual C# e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome CShp_UserControl.

Após a criação do projeto vamos criar o nosso controle de usuário.

Clique com o botão do mouse sobre o nome do projeto e a seguir clique em Add->User Control;

A seguir informe o nome ucEstados.cs e clique no botão Add:

Você verá o User Control Designer aberto pronto para ser usado:

A partir da Toolbox inclua no designer os seguintes controles:

Defina o leiaute e cores conforme mostra a figura abaixo:

Agora vamos criar uma classe Estado para representar os estados que vamos exibir no combobox. No menu Project clique em Add Class e informe o nome Estado.cs.

A seguir defina o código abaixo na classe Estado:

namespace CShp_UserControl
{
    public class Estado
    {
        public int Id { get; set; }
        public string Nome { get; set; }
    }
}

Agora abra o arquivo ucEstados.cs e inclua o código abaixo neste arquivo:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace CShp_UserControl
{
    public partial class ucEstados : UserControl
    {
        public ucEstados()
        {
            InitializeComponent();
        }
        public Estado estadoSelecionado
        {
            get
            {
                return (Estado)cboEstados.SelectedItem;
            }
        }
        private void ucEstados_Load(object sender, EventArgs e)
        {
            List<Estado> estados = new List<Estado>();
            estados.Add(new Estado() { Id = 1, Nome = "Acre" });
            estados.Add(new Estado() { Id = 2, Nome = "Alagoas" });
            estados.Add(new Estado() { Id = 3, Nome = "Amapá" });
            estados.Add(new Estado() { Id = 4, Nome = "Amazonas" });
            estados.Add(new Estado() { Id = 5, Nome = "Bahia" });
            estados.Add(new Estado() { Id = 6, Nome = "Ceará" });
            estados.Add(new Estado() { Id = 7, Nome = "Distrito Federal" });
            estados.Add(new Estado() { Id = 8, Nome = "Espírito Santo" });
            estados.Add(new Estado() { Id = 9, Nome = "Goiás" });
            estados.Add(new Estado() { Id = 10, Nome = "Maranhão" });
            cboEstados.DataSource = estados;
            cboEstados.ValueMember = "Id";
            cboEstados.DisplayMember = "Nome";
        }
    }
}

Este código define uma propriedade chamada estadoSelecionado que retorna o objeto Estado selecionado e também preenche uma lista de objetos estados com 10 estados para testes.

Compile o projeto e você verá que o User Control criado vai aparecer na ToolBox.

Abra o formulário Form1.cs a partir da ToolBox arraste e solte o controle ucEstados no formulário. Inclua também um botão de comando conforme o leiaute abaixo:

Agora defina o seguinte código no evento Click do botão de comando:

   private void btnEstadoSelecionado_Click(object sender, EventArgs e)
    {
            MessageBox.Show(string.Format("Id = {0}, Nome : {1}", ucEstados1.estadoSelecionado.Id.ToString(), ucEstados1.estadoSelecionado.Nome.ToString()));
   }
 

Executando o projeto iremos obter o seguinte resultado:

Pegue o código do projeto aqui : CShp_UserControl.zip

Até o próximo artigo...

(Disse Jesus) O meu mandamento é este: Que vos ameis uns aos outros, assim como eu vos amei. 
João 15:12

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

Referências:


José Carlos Macoratti