You are on page 1of 7

27/01/2011

C#: Mscaras Dinmicas para textBox c


Nossos nmeros
Dicas: 1.314 Cdigos/scripts: 280 Funes de VBScript : 90 Funes JScript : 05 Livros: 1.805 Notcias: 2.836 A rtigos: 3.073 Oportunidades: 4.852 Vdeos .Net: 489

quinta-feira, 27 de janeiro de 2011

Busca

Revistas
easy .net Magazine #7

:: Acessibilidade
Ir para contedo principal: A LT + 1

Artigos

Ver pgina do autor

C#: Mscaras Dinmicas para textBox com qualquer tipo numrico (CEP , CPF, CNPJ, MOEDA , DATA)
Por: Jorge Armando Andrade e C orra [Entre em contato com o autor ]
Ba charel em Sistem a s de Info rm ao pe lo C entro Universitrio do pla nalto de Arax em dezem bro de 2007. Ex peri ncia co m o analista de supo rte e no desenvolvim e nto C #.ne t. Intro duo ao IDE do Visual Studio

:: Participe
Publique um artigo Publique uma oportunidade Publique uma notcia Publique um evento Publique um curso

.net Magazine #81


Feed de artigos. Feed de artigos deste auto r. Gere seu fee d personalizado Assunto

Publique uma dica Publique um cdigo

:: Informativo
Receba nossos informativos por email. E-mail:

C#: Mscaras Dinmicas para textBox com qualquer tipo numrico (CEP , CPF, CNPJ, MOEDA , DATA)
Publicado em: 22/04/2008 C ompartilhe
ASP.NET MVC 3

Digite a palavra abaixo:

Visando facilitar a vida de quem trabalha com desenvolvimento criei este artigo descrevendo passo-a-passo e elucidando atravs de cdigo fonte uma maneira dinmica e eficaz de aplicar mscaras a contedos numricos de qualquer tipo em um texBox, utilizando C# (C Sharp). Mscara, neste caso em questo, um recurso de interface utilizado para assemelhar determinada informao(neste exemplo, numrica), visvel no sistema, a maneira como estamos acostumados a manipul-la na vida real.

Publicidade

:: Oportunidades
Cadastrar oportunidades Gerenciar suas oportunidades Cadastrar nova empresa

Por exemplo, ao ver o nmero "00000000" inicialmente no podemos atribuir nenhuma informao caracterstica adicional a ele, fora o fato de se constituir de uma cadeia numrica. Aplicando uma mscara, atravs da interface visual do sistema teremos "00000-000", o que pode nos levar a deduzir que este nmero se trata de um CEP. Este recurso muito importante na preveno de erros por parte do usurio assegurando ao mesmo a no necessidade de digitao de determinados dgitos que possam gerar equvocos durante a insero dos dados no sistema. Visando dinamizar este processo de "mascarar" um dado numrico em tempo real criei uma funo principal que capaz de adicionar uma mascara de qualquer tipo (CEP, CPF, CNPJ), o que pode facilitar a vida de alguns desenvolvedores, que como eu, inicialmente encontraram poucas referncias a respeito. Mas por que no usar um MaskedTextBox? Eu considero o MakedTextBox um tipo de textBox meio "engessado", com algumas limitaes, e para o meu caso em questo achei mais eficiente a criao deste cdigo fonte para manipulao do textBox. Seguem abaixo algumas caractersticas do resultado expresso pelo cdigo que ser descrito: - a insero dos nmeros ocorre da direita para a esquerda. Sendo assim num campo do tipo moeda (0,00) a insero de seguidos "2" transcorreria da seguinte maneira:

:: Especiais
Bsico de C++

C++ Builder Curso A SP.NET 3.5 em VB.NET e C# Guia Prtico de HTML Testes com Visual Studio Team System 2008

:: Desenvolvimento
A ctionScript A DO.NET A SP A SP.NET A utomao Comercial C#

0,02 -> 0,22 -> 2,22 -> 22,22


- a tecla BackSpace tambm se sucede da direita para a esquerda (sem perda visual da mascara) da seguinte maneira:

2,22 -> 0,22 -> 0,02


Acompanhem agora o detalhamento do cdigo em questo: Como exemplo, aplicarei mscara a dois tipos de dados: O CEF ("12345-678"), e o CNPJ("12345678/1234-12"). Note que no caso do CNPJ apresentam-se dois caracteres Feeds
O portunida des Notcias

www.linhadecodigo.com.br/Artigo.asp

1/7

27/01/2011
C/C++ Coldfusion CSS Delphi Disp. Mveis HTML Java Javascript LSL (Second Life) Modelagem PHP Python Sharepoint Silverlight SQL VBA (Office) Visual Basic Visual Basic .NET Visual Fox Pro WCF/WPF Web Services XML

C#: Mscaras Dinmicas para textBox c


especiais. Farei isso para mostrar que o cdigo abaixo pode aplicar a mascara com quantos caracteres forem necessrios, bastando para isso definir a quantidade na chamada da funo. Passo 1: Primeiramente definiremos algumas propriedades iniciais para o textBox: textAlign = rigth (alinhamento do texto para direita) text = 00000-000 (para CEP) ou text = 00000000/0000-00 (para CNPJ) valores iniciais Passo 2: Definiremos no evento Click do textBox o posicionamento do cursor para o final do mesmo, evitando assim que o usurio clique no meio da string para alter-la:
private void txtCEP_Click(object sender, EventArgs e) { txtCEP.SelectionStart = txtCEP.Text.Length + 1; }
Artigos Artigos personalizado (Po r assunto) Artigos personalizado (Po r autor) Porta l Vdeo s .NET Porta l Vdeo s Delphi LC Blog (O nde voc faz a notcia)

Os 10+ | Autores do dia


Israel Ace Jlio Cesar Fabris Battisti Anderson Patricio

Passo 3: Chamaremos a funo responsvel pela mascara no evento KeyPress do textBox:


//atribui valor da tecla digitada e da string do texbox para dentro do objeto mascara //posteriormente compara se a string a tecla numero, anulando-a caso contrrio (mascara.mascaraNumero()) //e finalmente aplica a mascara (mascara.mascaraCEP) private void txtCEP_KeyPress(object sender, KeyPressEventArgs e) { classeMascaraJa mascara = atribuiMascara((char)e.KeyChar, txtCEP.Text); if (!(e.Handled = mascara.mascaraNumero(9)))//este numero(9) a quantidade de caracteres maximo do campo txtCEP.Text = mascara.mascaraCEP(); txtCEP.SelectionStart = txtCEP.Text.Length + 1; } private void txtCNPJ_KeyPress(object sender, KeyPressEventArgs e) { classeMascaraJa mascara = atribuiMascara((char)e.KeyChar, txtCNPJ.Text); if (!(e.Handled = mascara.mascaraNumero(16))) txtCNPJ.Text = mascara.mascaraCNPJ(); txtCNPJ.SelectionStart = txtCNPJ.Text.Length + 1; } private classeMascara atribuiMascara(char caractere, string texto) { //preenche atributos mascara classeMascaraJa objetoMascara = new classeMascaraJa(); objetoMascara.recebeTecla(caractere); objetoMascara.recebePalavra(texto); return objetoMascara; }

Luiz Felipe de Freitas Alessandro de Oliveira Faria Alfred Reinold Baudisch Mauricio Junior Robert Martim Ramon Dures Eric C M Oliveira

Os 10+ | Artigos do dia


HTML Bsico HTML Avanado Criando aplicativos para o Orkut Tutorial de Tabelas Dinmicas no Excel Parte 1 Comandos bsicos em SQL insert, update, delete e select PL/SQL - Procedures e Funes Ajax Poll para requisies automatizadas com Primefaces Iniciando um projeto de Nota Fiscal Eletrnica - NFe Montando estrutura de um site MVC 2 com Visual Studio .NET 2010 - Parte 2 Nota Fiscal Eletrnica Gerao, Assinatura e Transmisso

:: Infra
BizTalk Server CRM Exchange Server ForeFront / A ntigen / IA G Interoperabilidade ISA Server Linux MOF MS Dynamics CRM Network OCS / LCS Outlook Powershell e Scripts Redes Segurana System Center e Gerenciamento Virtualizao Windows Windows Server

No evento KeyPress inicialmente chama-se uma funo atribuiMascara, que responsvel por chamar a classe mascara instanciada. Passo4: Este passo a codificao da classe mascara. O cdigo fonte e alguns comentrios seguem.
class classeMascaraJa { //ATRIBUTOS-------private char tecla; private string palavra; private Int32 fator = 1; //METODOS PRIVATE-private void retiraCaractere(char carac) { //retirando caractere da string string[] campos = palavra.Split(carac); palavra = Convert.ToDouble(string.Concat(campos)).ToString(); } private void acrescentaZeros(int normal, int backspace) { //acrescentado zeros a string while ((palavra.Length < normal) || ((palavra.Length < backspace) && (tecla == (char)Keys.Back))) { palavra = "0" + palavra; } } private void retornaFator() { //compara se backspace if (tecla == (char)Keys.Back) fator = 3; } public void limpaNumero(char simbolo, int min, int max) { //chama funcao para retirada de caracter e insercao de zeros retiraCaractere(simbolo);

:: Banco de Dados
A ccess Cach Firebird Interbase MySQL Oracle

www.linhadecodigo.com.br/Artigo.asp

2/7

27/01/2011
SQL Server Sybase

C#: Mscaras Dinmicas para textBox c


acrescentaZeros(min, max); retornaFator(); } //funcao recebe quantidade de parter do numero, inicio e quantidade de caracteres de cada parte dentro da string, caracter e efetua qualquer tipo de mascara. private void mascaraQualquer(Int32 quantidade, string[,] limites) { string partes = ""; Int32 contador = 0; while (contador < quantidade) { partes += palavra.Substring(Convert.ToInt32(limites[contador, 0]), Convert.ToInt32(limites[contador, 1])) + limites[contador, 2]; contador = contador + 1; } palavra = partes; } //METODODS PUBLICOS---public void recebeTecla(char x) { tecla = x; } public void recebePalavra(string y) { palavra = y; } //metodo recebe caracter e retorna falso se numero public bool mascaraNumero(Int32 maximo) { if ((!char.IsNumber(tecla) || (palavra.Length >= maximo && Convert.ToInt32(palavra.Substring(0, 1)) != 0)) && (tecla != (char)Keys.Back)) return true; else return false; } //aplica a mascara no formato 00000-000 public string mascaraCEP() { limpaNumero('-', 7, 9); string[,] partes = { { "0", "5", "-" }, { "5", Convert.ToString(1 + fator), "" } }; mascaraQualquer(2, partes); return palavra; } //aplica a mascara no formato 00000000/0000-00 public string mascaraCNPJ() { string[] camposAux; palavra = string.Concat(camposAux = palavra.Split('/')); limpaNumero('-', 13, 15); string[,] partes = { { "0", "8", "/" }, { "8", "4", "-" }, { "12", Convert.ToString(1 * fator), "" } }; mascaraQualquer(3, partes); return palavra; }}

:: Gerncia
A rquitetura Ciclo de Vida de Desenvolvimento Controle de Verso Estimativas Metodologias MOF Qualidade e Testes

:: Design
Corel Flash Photopaint Photoshop

Passo 5: No h passo 5! Este todo codigo que ser preciso para converter tanto CEP quanto CNPJ para suas devidas mscaras. Se analisarem vero que o codigo simples e totalmente reutilizvel. A operao principal para conversao de um tipo numero se encontra dentro de dois mtodos: um public e um private. No caso do CNPJ por exemplo:
public string mascaraCNPJ() { string[] camposAux; palavra = string.Concat(camposAux = palavra.Split('/')); limpaNumero('-', 13, 15); string[,] partes = { { "0", "8", "/" }, { "8", "4", "-" }, { "12", Convert.ToString(1 * fator), "" } }; mascaraQualquer(3, partes); return palavra; }}

Extraimos previamente o caractere /. Em seguinda efetuamos a limpeza do numero com relao ao caractere (Obs: no caso do CEP no preciso uma estracao previa pois s h um tipo de caractere (-). Em datas, por exemplo, tambem somente seria necessrio extrair o / usando o metodo limpaNumero()). Os Nmeros que seguem o caractere so 13 que corresponde ao valor mnimo de caracteres(somente numeros) menos 1, e 15 ao valor mximo de caracteres + 1. No caso de data, CEP, CNPJ, o numero mximo e mnimo so o mesmo, mas no caso de um

www.linhadecodigo.com.br/Artigo.asp

3/7

27/01/2011

C#: Mscaras Dinmicas para textBox c


tipo moeda o valor minimo 3 e o maximo depende do limite de valor. Feita a limpeza afetuaremos agora a aplicao da mascara: Primeiro necessrio entender que o numero ser dividido em partes. No caso do CEP duas partes (parte1: 00000 e parte2: 000, ou seja, antes e depois do digito) e no CNPJ tres partes. Na array(vetor bidimensional) partes sero inseriadas a posio do primeiro digito e a quantidade de digitos de cada parte da string(correspondendo a cada linha da matriz) seguido do caractere a ser inserido. Ex.: CNPJ: 01234567/9999-00 Aps extrao dos digitos ficaria: 01234567999900 Diviriremos entao em partes: Parte1: 01234567 ; minimo = posio 0 ; quantidade = 8; caracter = / {0,8,/} Parte2: 9999; minimo = posicao 8; quantidade = 4; caracter = - {8,4,-} Parte3: 00; minimo = 12; quantidade = ? aqui depende, se a pessoa tiver digitado um numero seria 1 para insero de mais 1, ficando assim com dois, mas se o usuario tiver teclado o backspace teria de ser 3 para se diminuir 1 e ficar com a quantidade correta. Solucionando esta questo fao uso da varivel fator multiplicada ao valor 1. Quantidade = 1 * fator ; caracter = {"12",Convert.ToString(1*fator),""} Definidos os limites da string final, basta chamar o metodo mascaraQualquer(3, partes);, com a quantidade de partes(3) e a string particionada. Acredito e prego o compartilhamento do conhecimento, por isso, espero ter ajudado alguem em outra parte do Brasil.

Curtir

Cadastre-se para ver do que seus amigos gostam.

Compartilhe

Classificaes(16)
Classificao mdia:

Deseja contribuir? ParticiparouLogin

Google Friend Connect

Membros (438) Mais

Muito bom ..rs aline vivoneb onani 1/26 muito bom.. Jose Feliciano 1/5 Muito bom Andrey, Tenho um problema com o Assembly, o sistema no consegue encontrar o arquivo, tem... Mais Coladela 12/29 Parabns. Jacson 12/15

J um membro? Fazer login

Adorei o passo a passo, simples e eficiente!!!! naulila reis 12/9


Traduzir Prxima

Inclua um comentrio sobre o artigo


E logios e c rtic as s o muito bem vindos , porm o c omentrio deve ter refernc ia ao artigo em pauta. O portal e o autor agradec em.

Topo

Nome: E-mail: C omentrios:

www.linhadecodigo.com.br/Artigo.asp

4/7

27/01/2011

C#: Mscaras Dinmicas para textBox c

Digite a palavra abaixo:

Para dvidas tcnicas, NO UTILIZE ESTE ESPAO, utilize nosso frum de discusso. http://linhadecodigo.com.br/cs2/forum

Comentrios sobre o artigo


O l , oo m eu est da ndo erro na seguinte linha ... pa la vra = C onvert.T oDouble (string.C onca t(cam po s)).ToString(); Im put string was no t in a correct fo rm at. Quem enviou: Fabiano Postado em: 03/03/2010 00:00:00

Ver Todos comentrios

O l m uito interessante e ssa m a neira de m ascara no cam po tex tbo x , se r que po deria m e a judar, esta va tenta ndo fa zer um a para digita o de e ndereo IP m ais no estou tendo sucesso ou no consigo digitar corretam ente, pois o cursor sem pre pe rm ane ce no ultim o cam po ou d erro quando o m todo m a sca raQ ualquer e x ecutado po is falta um par m e tro do array O cdigo que estou im ple m e nta do nessa classe que foi pa ssada po r voc //aplica a m a sca ra no form ato 000.000.0.000 public string m ascaraIP() { string[] cam posAux ; pa la vra = string.C onca t(cam po sAux = palavra .Split('.')); lim paNum ero('.', 10, 13); string[,] parte s = { { "0", "3", "." }, { "3", "3", "." }, {"6","1","."},{ "7", C onvert.T oString(1 * fator), "" } }; m ascara Q ua lquer(4, partes); return palavra ; } Po deria m e a judar com o m onta r essa m asca ra e o m todo m a sca raQ ualquer. O briga do! Quem enviou: Marcos Araujo Postado em: 28/01/2010 00:00:00 C aro, Ve rificando os eventos pa ra o tex tbox , nao encontrei o evento O nC lick e nem o Keypress. C om o isso ? Abraco s Quem enviou: Neto Postado em: 14/01/2010 00:00:00 Bo a Noite Jorge Arm ando Andrade e C orra, este ex em plo foi m uit util. obrigado Quem enviou: Ande rson Postado em: 13/01/2010 00:00:00 O l , gostei m uito do a rtigo e esto u querendo usar, m as co m igo apare ceu um problem a, esto u usando o VS 2008 co m linguagem C # e criando um a aplica o Winsows Form , quero usar a m ascara pa ra CP F, s que quando criei a classeMa scaraJa ele acusou erro no Keys.Back (The Na m e 'Keys' doe s not ex ist in the current contex t). se a lgum puder m e ajuda r ficare i agrade cido. Quem enviou: Andr Luiz Postado em: 30/10/2009 00:00:00 Se i q j tem po q esse a rtigo ex iste, porm esto u precisando de um a ajuda . N o e stou conseguindo form a r um a m scara pa ra 4 dgitos, ex em plo: 0000 Ja m ex i pra la e pra ca e nada . Se algum puder ajudar, agradeo m uito. Quem enviou: Wivison Postado em: 16/07/2009 00:00:00 Se i que j tem m ais de um ano que escre veu este artigo , m ais m e ajudou m uito . Fico gra to.

www.linhadecodigo.com.br/Artigo.asp

5/7

27/01/2011

C#: Mscaras Dinmicas para textBox c


Quem enviou: Everton Postado em: 11/05/2009 00:00:00 O tim a Mate ria. Pa rabens. Quem enviou: Fabrizio Gianfratti Postado em: 02/04/2009 00:00:00 No caso de data co m o a no de 4 dgitos, a m scara seria : string[,] parte s = { { "0", "2", "/" }, { "2", "2", "/" }, { "4", C onve rt.ToString(2 + fa tor), "" } }; Espero ter ajudado. Quem enviou: Ra fae l C ristiam Arajo R ibeiro Meaux Postado em: 12/01/2009 00:00:00 Po deria m e a judar cria r a m ascara para m oeda ne ste form ato a baix o . Te x to no Tex tBo x = 0,00 aps digitar m x im o num e ro = 999,99 aps digitar m inim o num ero = 0,01 o re sto padro , com o adapto e ste c digo abaix o pa ra funcionar public string m ascaraMo eda() { lim paNum ero(',', 3, 5); string[,] parte s = { { "0", "3", "," }, { "3", C onvert.ToString(1 * fator), "" } }; m ascara Q ua lquer(2, partes); return palavra ; } po is o m esm o n o funciona Quem enviou: Nilton Fl vio Postado em: 12/08/2008 00:00:00

Produtos relacionados
Ainda no existem produtos relacionados.

Topo

Outros artigos do autor


Ainda no existem novos artigos para este autor.

Topo

Artigos relacionados
Montando estrutura de um site MVC 2 com Visual Studio .NET 2010 - Parte 2 Montando estrutura de um site MVC com Visual Studio 2010 Monitorando Arquivos e Diretrios com FileSystemWatcher Trabalhando com Linq To XML parte 2: Linq vS Lambda Expression C riando arquivo XML com Linq To XML Trabalhando com cache em propriedades C oncatenao de Strings Trabalhando com C LR: Stored Procedure Segundo Passo C omponente TreeView C # C riando um Windows Service C riptografando dados com C # Monitorando o consumo de memria e tempo de execuo Salvando em XML Melhorando WinApps seguindo WebApps C adastro de um C onsultrio em Windows Forms, com C # e SQL Server Parte 12 C riar arquivo de integrao com Integration Services Trabalhando com Array Params no C # Pegando o horrio inicial e final do uso do Windows usando C # C omo funcionam as Arrays (Matrizes) Multidimensionais no C #? C adastro de um C onsultrio em Windows Forms, com C # e SQL Server Parte 11 Documentao de C digo .Net ASP.NET MVC C ustom Helpers Eval em C # com IronRuby Trabalhando com C LR: Stored Procedure Primeiro passo Entendendo interfaces com C # Executar aplicaes em background com Agendador de Tarefas Windows ExpandoObject: dinamismo no .NET 4.0 Integrao C # + Ruby Utilizando um Tipo T como parmetro e recuperando seus valores Detectando mudanas em objetos

Topo

www.linhadecodigo.com.br/Artigo.asp

6/7

27/01/2011

C#: Mscaras Dinmicas para textBox c


Copyright 2011 - Todos os Direitos Reservados a DevMedia www.devmedia.com.br | www.javafree.org | www.linhadecodigo.com.br Poltica de privacidade e de uso | A nuncie | Fale conosco

Share Page

Recent Activity

Recommended

Like

Twitter

Digg This

Stumble It!

Chat with your friends

www.linhadecodigo.com.br/Artigo.asp

7/7