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

 

img 

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.

 

img 

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

 

img 

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.

 

img 

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.