Componente Windows Forms

Veja neste artigo de Everson Volaco, como criar componentes para aplicações Windows Forms. Acesso exclusivo para Assinantes.

Componente Windows Forms

Criando um componente .NET com BDS 2006 para aplicações Windows Forms

Neste artigo veremos como criar um componente .NET utilizando o BDS 2006. A idéia é criarmos um componente derivado do TextBox (paleta Windows Forms) utilizando a linguagem C#. Criar um componente derivado de um existente é bastante útil quando você realiza repetidamente alterações em diversas propriedades e eventos. Estas alterações podem ser definidas diretamente no novo componente.

Criando o componente

  Para o exemplo deste artigo vamos criar um componente descendente do TextBox que terá sua propriedade BorderStyle definida como FixedSingle por padrão ao invés de Fixed3D e possuirá um código em seu evento Enter para alterar a propriedade BackColor ao receber foco e um código no evento Leave para retornar o valor original à propriedade BackColor. Abra o BDS 2006 e a partir do menu principal selecione File|New|Other... para abrir a janela New Items. Selecione a categoria C# Projects e crie uma nova Class Library. Na janela New Application entre com um nome e uma localização para o projeto. Para este exemplo utilizei o nome ClubeDelphi. Selecione a janela Project Manager e altere o nome do arquivo Class.cs para ClubeDelphi.cs a partir da opção Rename disponível no menu de contexto.

 

Caso o arquivo ClubeDelphi.cs não esteja aberto no editor de código, realize um duplo clique em cima do mesmo. Altere o nome do namespace para ClubeDelphi.Componentes. Antes de iniciarmos o desenvolvimento do componente nós devemos adicionar as referencias aos Assemblies que serão utilizados por nossa biblioteca. Ainda na janela Project Manager selecione a pasta References e clique na opção Add reference... através do menu de contexto. Dentro da janela Add Reference entre na aba .NET Assemblies. Selecione na lista o assembly System.Drawing e clique no botão Add reference para adicioná-lo ao projeto. Faça o mesmo para o assembly System.Windows.Forms (Figura 1).

 

 

Figura 1. Adicionando a referencia aos Assemblies necessários para a criação do componente .NET

 

Clique no botão OK para fechar a janela Add reference. Os dois Assemblies adicionados passam a ser listados dentro da pasta References da janela Project Manager. Voltando ao arquivo ClubeDelphi.cs adicione o seguinte código no início do arquivo:

 

using System.Drawing;

using System.Windows.Forms;

 

Após adicionar a referencia aos Assemblies dentro do projeto nós precisamos fazer referencia aos mesmos também dentro do arquivo que irá utilizar suas classes. Altere o nome da classe de Class para CDTextBox. Altere também o nome no construtor da classe. Como o componente será herdado do TextBox nós devemos especificar isto na assinatura da classe. Em C# a característica de herança é apontada através de dois-pontos (:). Veja o código completo da classe até este ponto:

 

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace ClubeDelphi.Componentes

{

       public class CDTextBox: TextBox

       {

             //Construtor

             public CDTextBox()

             {

            

             }

       }

}

 

Dentro do construtor da classe entre com o seguinte código:

 

BorderStyle = BorderStyle.FixedSingle;

 

Através deste código alteramos o valor padrão da propriedade BorderStyle para FixedSingle ao invés de Fixed3D. Como próximo passo vamos criar uma variável para que possamos armazenar o valor original da propriedade BackColor do componente. Antes do construtor da classe entre com o seguinte código para declarar a variável:

 

private Color oldBackColor;

 

No código acima declaramos uma variável de nome oldBackColor do tipo Color. Definimos o escopo de visibilidade da mesma como private, isto é, seu valor estará disponível apenas para os métodos presentes nesta classe. Como comentado no início deste artigo à idéia é alterarmos também o comportamento dos eventos Enter e Leave fazendo com que a cor de fundo do componente seja alterada ao receber foco e tenha sua cor original restaurada ao perder o foco. Para que possamos adicionar está funcionalidade ao nosso componente vamos incluir o seguinte código a nossa classe logo abaixo do construtor:

 

protected override void OnEnter(System.EventArgs e)

{

        oldBackColor = BackColor;

        BackColor = Color.Yellow;

}

 

protected override void OnLeave(System.EventArgs e)

{

        BackColor = oldBackColor;

}

           

No código acima nós criamos dois métodos: OnEnter e OnLeave. Na verdade estes métodos estão presente na classe base, neste caso TextBox. O que fizemos foi herdar esses métodos e customizar o seu comportamento. Repare que na linguagem C# a palavra override é utilizada dentro da assinatura do método logo após a especificação do escopo de visibilidade do mesmo.

 

No método OnEnter nós armazenamos o valor original da propriedade BackColor em nossa variável oldBackColor e alteramos a propriedade BackColor para receber a cor amarela. Este código será executado quando nosso componente receber o foco. No método OnLeave nós devolvemos o valor original da propriedade BackColor através de nossa variável oldBackColor. Este código será executado quando nosso componente perder o foco. Veja na listagem abaixo o código completo do arquivo ClubeDelphi.cs:

 

using System;

using System.Drawing;

using System.Windows.Forms;

 

namespace ClubeDelphi.Componentes

{

       public class CDTextBox : TextBox

       {

             private  Color oldBackColor;

 

             public CDTextBox()

             {

               BorderStyle = BorderStyle.FixedSingle;

             }

 

             protected override void OnEnter(System.EventArgs e)

             {

               oldBackColor = BackColor;

               BackColor = Color.Yellow;

             }

 

             protected override void OnLeave(System.EventArgs e)

             {

               BackColor = oldBackColor;

             }

       }

}

 

Terminada a implementação do componente clique na opção Project|Build disponível no menu principal para compilar e gerar o assembly (arquivo .dll) o qual conterá nosso componente.

Instalando o componente

O próximo passo é instalarmos o componente dentro da Tool Palette do BDS 2006 para que possamos utilizá-lo em nossas aplicações Windows Forms. Através do menu principal selecione a opção Component|Installed .NET Components... para abrir a janela Installed .NET Components. Dentro da aba .NET Components altere o campo Category para ClubeDelphi e clique no botão Select na Assembly... para que possamos selecionar o assembly que contem nosso componente CDTextBox. Ao abrir a janela “Browse to an assembly or executable...” selecione o arquivo ClubeDelphi.dll criado dentro do subdiretório bin/Debug do diretório de nosso projeto e clique no botão Abrir para adicioná-lo a IDE. Veja na Figura 2 o componente adicionado na janela Installed .NET Components.

 

 

Figura 2. Componente CDTextBox adicionado a IDE do BDS 2006

Testando o componente

  Para que possamos testar as funcionalidades do nosso componente vamos criar uma aplicação Windows Forms. Está aplicação pode ser tanto em Delphi for .NET quando em C# Builder. Apesar do nosso componente ter sido escrito em C# nós podemos utilizá-lo normalmente em uma aplicação Windows Forms Delphi for .NET.

Inicie uma nova aplicação Windows Forms no BDS 2006 através da opção de menu File|New|Windows Forms Application – Delphi for .NET. Selecione o componente CDTextBox através da paleta de componentes (Figura 3).

 

 

Figura 3. Componente CDTextBox disponível na paleta ClubeDelphi da janela Tool Palette.

Adicione três componentes CDTextBox ao WinForm e altere a propriedade BackColor de dois deles para uma cor qualquer a sua escolha. Compile e rode a aplicação. Veja a mesma em execução na Figura 4.

 

 

Figura 4. Aplicações Windows Forms de exemplo utilizando o componente CDTextBox

Conclusão

Neste artigo vimos que a criação de componentes .NET são tão simples quanto componentes Win32 – VCL. Apesar deste artigo ter utilizado a linguagem C# na criação do componente, você pode criar o mesmo utilizando Object Pascal (ou Delphi Language).

Um abraço e até a próxima.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados