Encapsulamento em C#
O “Encapsulamento vem de encapsular, que em programação orientada a objetos significa separar o programa em partes, as mais isoladas possíveis. A idéia é tornar o software mais flexível, fácil de modificar e de criar novas implementações”. (Fonte: Wikipedia.org).
Introdução:
Neste artigo você irá aprender a como criar um objeto encapsulado para tornar uma caixa de texto estendida com novas funcionalidades, no nosso exemplo este novo objeto irá trocar as cores quando ganhar ou perder o foco, facilitando a percepção da alternância de código por parte do usuário. Na prática esse controle quando ganhar o foco ficará azul e quando perder ficará branco.
Outra funcionalidade estendida será a opção de tornar a caixa de texto numérica, ou seja, o usuário poderá definir através de uma propriedade própria se a caixa será numérica ou não.
Pode parecer fácil (e, na verdade é), mas imagine se seu formulário ou projeto tiver várias Caixas de Texto ou se você pretende usar isso em outros projetos? Seria muito repetitivo programar eventos para cada uma delas e isso tornaria o código deselegante.
Uma solução para esse problema é criar uma classe derivada de uma Caixa de Texto e encapsular nela todo o código necessário para a operação. Neste artigo iremos mostrar como criar uma Caixa de Texto que só aceita números (dependendo de sua propriedade Numeric, que criaremos) e que a cor do fundo altera-se quando recebe e perde o foco respectivamente.
Mão na massa
Primeiro comece um projeto novo em C# do tipo WindowsApplication, dê o nome de Encapsulamento e clique no botão OK.
Agora, na caixa de diálogo SolutionExplorer clique com o botão direito do mouse sobre o nome do projeto (Encapsulamento) e selecione Add à New Item. Escolha o tipo Class, dê o nome de MyTextBox e clique no botão Add.
Sua classe deve estar parecida com esta:
using System;
Você precisa adicionar duas refêrencias: System.Drawing e System.Windows.Forms.
A seguir todo código comentado da classe MyTextBox:
using System;
/* Um Override do método OnKeyPress() responsável pelo
protected override void OnGotFocus(EventArgs e)
protected override void OnLostFocus(EventArgs e)
Agora precisamos criar um método de acesso para a variável privada numeric. Um método de acesso é usado para obter ou definir o valor de uma varável privada. O método de acesso para numeric é declarado assim:
public bool Numeric
Você pode inserir o método de acesso logo depois de declarar a variável numeric.
O nome da variável e do método de acesso devem ser diferentes, por isso uma é escrita totalmente em minúscula e a outra começa com maiúscula.
Dentro do método de acesso Numeric existem outros dois métodos: get e set.
Get è Obtem o valor da variável;
Set è Define a variável de acordo com o valor passado (value).
O método OnKeyPress() começa verificando o valor da variável numeric, se for false o método trata a tecla pressionada normalmente e retorna:
if (!numeric)
Caso seja true impede a entrada de letras:
if (char.IsNumber(e.KeyChar) || e.KeyChar.ToString() == "\b")
O método OnGotFocus() recebe o controle quando a Caixa de Texto recebe o foco. Ele é bem simples:
protected override void OnGotFocus(EventArgs e)
O método OnLostFocus() é executado quando a Caixa de Texto perde o foco. Também é simples:
protected override void OnLostFocus(EventArgs e)
Agora que o código está pronto falta adicionar nossa Caixa de Texto ao projeto. Para isso clique em Build Solution no menu Build:
Nossa Caixa de Texto aprecerá na janela ToolBox:
O método de acesso Numeric aparece como uma propriedade da Caixa de Texto:
Para interromper a entrada de letras é só definir a propriedade Numeric com True.
Conclusão:
Neste artigo foi explorado o conceito de encapsulamento e criação de componentes estendidos. Você poderá implementar novos componentes com base em componentes já existente de forma bem simple, como visto nesse artigo. Para distribuir o componente você poderá criá-lo como DLL, que veremos em breve. Artigo com base nas aulas do professor Marcos Roberto de Moraes.
Autor:
Pedro Henrique Lemes da Silva