27/01/2011
C#: Máscaras Dinâmicas para textBox c… Nossos números
quint a-f eira , 27 de jane iro de 2011
Dicas: 1.314 Códigos/scripts: 280 Funções de VBScript : 90 Funções JScript : 05 Livros: 1.805 Notícias: 2.836 Artigos: 3.073 Oportunidades: 4.852 Vídeos .Net: 489
Busca
Revistas
easy .net Magazine #7
:: Acessibilidade Ir para conteúdo principal: ALT + 1
:: Participe Publique um artigo Publique uma oportunidade
Artigos
Ver página do autor
C#: Máscaras Dinâmicas para textBox com qualquer tipo numérico (CEP , CPF, CNPJ, MO EDA , DATA) Por: Jorge Armando Andrade e Corrêa [Entre em contato com o autor ] Bacharel em Sistemas de Informação pelo Centro Universitário do planalto de Araxá em dezemb ro de 2007. Experiência Experiência como a nalist nalista a de suport suporte e e no dese nvolv nvolvimento imento C#.net.
Publique uma notícia Publique um evento
Introdução ao IDE do Visual Studio
.net Magazine #81 Feed de art artigos. igos. Feed de art artigos igos deste a utor utor..
Publique um curso Gere seu feed personalizado
Assunto Assunt o
Publique uma dica Publique um código
:: Informativo Receba nossos informativos por email.
C#: Máscaras Dinâmicas para textBox com qualquer tipo numérico (CEP , CPF, CNPJ, MOEDA , DATA) Publicado em: 22/04/2008 Compartilhe
ASP.NET ASP.NE T MVC 3
E-mail: Digite a palavra abaixo:
Visando facilitar a vida de quem trabalha com desenvolvimento criei este artigo descrevendo passo-a-passo e elucidando através de código fonte uma maneira dinâmica e eficaz de aplicar máscaras a conteúdos numéricos de qualquer tipo em um texBox, utilizando C# (C Sharp).
Publicidade
Máscara, neste caso em questão, é um recurso de interface utilizado para assemelhar determinada informação(neste exemplo, numérica), visível no sistema, a maneira como estamos acostumados a manipulá-la na vida real. :: Oportunidades Cadastrar oportunidades Gerenciar suas oportunidades Cadastrar nova empresa
:: Especiais Básico de C++ C++ Builder Curso ASP.NET 3.5 em VB.NET e C# Guia Prát ico de HTML Testes com Visual Studio Team System 2008
:: Desenvolvimento ActionScript ADO.NET ASP ASP.NET Automação Comerci Comercial al C#
Por exemplo, ao ver o número "00000000" inicialmente não podemos atribuir nenhuma informação característica adicional a ele, fora o fato de se constituir de uma cadeia numérica. Aplicando uma máscara, através da interface visual do sistema teremos "00000-000", o que pode nos levar a deduzir que este número se trata de um CEP. Este recurso é muito importante na prevenção de erros por parte do usuário assegurando ao mesmo a não necessidade de digitação de determinados dígitos que possam gerar equívocos durante a inserção dos dados no sistema. Visando dinamizar este processo de "mascarar" um dado numérico em tempo real criei uma função 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 referências a respeito. Mas por que não usar um MaskedTextBox? Eu considero o MakedTextBox um tipo de textBox meio "engessado", com algumas limitações, e para o meu caso em questão achei mais eficiente a criação deste código fonte para manipulação do textBox. Seguem abaixo algumas características do resultado expresso pelo código que será descrito: - a inserção dos números ocorre da direita para a esquerda. Sendo assim num campo do tipo moeda (0,00) a inserção de seguidos "2" transcorreria da seguinte maneira:
0,02 -> 0,22 -> 2,22 -> 22,22 - a tecla BackSpace também se sucede da direita para a esquerda (sem perda visual da masc ara) da seguinte maneira: maneira:
2,22 -> 0,22 -> 0,02 Acompanhem agora o detalhamento do código em questão: Como exemplo, aplicarei máscara 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
www.linhadecodigo.com.br/Artigo.asp…
Feeds Oportunidades Notícias
1/7
27/01/2011 C/C++ Coldfusion CSS Delphi Disp. Móveis HTML
C#: Máscaras Dinâmicas para textBox c… especiais. Farei isso para mostrar que o código abaixo pode aplicar a mascara com quantos caracteres forem necessários, bastando para isso definir a quantidade na chamada da função.
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
Java
final do mesmo, ev itando ass im que o usuário clique no meio da st ring para alt erá-la:
Javascript
private void txtCEP_Click(object sender, EventArgs e) { txtCEP.SelectionStart = txtCEP.Text.Length + 1; }
LSL (Second Life) Modelagem PHP Python Sharepoint Silverlight SQL VBA (Office) Visual Basic Visual Basic .NET Visual Fox Pro
XML
:: Infra BizTalk Server CRM Exchange Server ForeFront / Antigen / IA G Interoperabilidade ISA Server Linux
//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 contrário (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; }
No evento KeyPress inicialmente chama-se uma função atribuiMascara, que é responsável por chamar a classe mascara instanciada.
Network
class classeMascaraJa { //ATRIBUTOS-------private char tecla; private string palavra; private Int32 fator = 1;
Segurança System Center e Gerenciamento Virtualização Windows Windows Server
:: Banco de Dados Access Caché Firebird Interbase MySQL Oracle
Os 10+ | Autores do dia Israel Aéce Júlio Cesar Fabris Battisti
Alessandro de Oliveira Faria
c omentários seguem.
Redes
LC Blog (Onde você faz a notícia)
textBox:
Passo4: Este passo é a c odificaç ão da classe mascara. O código fonte e alguns
Powershell e Scripts
Portal Vídeos Delphi
Luiz Felipe de Freitas
MS Dynamics CRM
Outlook
(Por autor) Portal Vídeos .NET
Passo 3: Chamaremos a função responsável pela mascara no evento KeyPress do
MOF
OCS / LCS
Artigos personalizado (Por assunto) Artigos personalizado
Anderson Patricio
WCF/WPF Web Services
Artigos
Alfred Reinold Baudisch Mauricio Junior Robert Martim Ramon Durães Eric C M Oliveira
Os 10+ | Artigos do dia HTML Básico HTML Avançado Criando aplicativos para o Orkut Tutorial de Tabelas Dinâmicas no Excel – Par te 1 Comandos básicos e m SQL insert, update, delete e s elect PL/SQL - Procedures e Funções Ajax Poll para requisições automatizadas com Primefaces Iniciando um projeto de Nota Fiscal Eletrônica - NFe Montando estrutura de um site MVC 2 c om Visual Studio .NET 2010 - Parte 2 Nota Fiscal Eletrônica Geraçã o, Assinatura e Transmissão
//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);
www.linhadecodigo.com.br/Artigo.asp…
2/7
27/01/2011
C#: Máscaras Dinâmicas para textBox c…
SQL Server Sybase
:: Gerência Arquitetura Ciclo de Vida de Desenvolvimento Controle de Versão Estimativas Metodologias MOF Qualidade e Testes
:: Design Corel Flash Photopaint Photoshop
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; }}
Passo 5: Não há passo 5! Este é todo codigo que será preciso para converter tanto CEP quanto CNPJ para suas devidas máscaras. Se analisarem verão que o codigo é simples e tot almente reutilizável. A operação principal para conversao de um tipo numero se encontra dentro de dois métodos: 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 relação ao caractere “–“ (Obs: no caso do CEP não é preciso uma estracao previa pois só há um tipo de caractere (“-“). Em datas, por exemplo, tambem somente seria necessário extrair o “/” usando o metodo limpaNumero()). Os Números que seguem o caractere são “13” que corresponde ao valor mínimo de caracteres(somente numeros) menos 1, e “15” ao valor máximo de caracteres + 1. No caso de data, CEP, CNPJ, o numero máximo e mínimo são o mesmo, mas no caso de um
www.linhadecodigo.com.br/Artigo.asp…
3/7
27/01/2011
C#: Máscaras Dinâmicas para textBox c… tipo moeda o valor minimo é 3 e o maximo depende do limite de valor. Feita a limpeza afetuaremos agora a aplicação da mascara: Primeiro é necessário 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” serão inseriadas a posição 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 Após extração dos digitos ficaria: 01234567999900 Diviriremos entao em partes: Parte1: 01234567 ; minimo = posição 0 ; quantidade = 8; caracter = / {“0”,”8”,”/”} Parte2: 9999; minimo = posicao 8; quantidade = 4; c aract er = “-“ {“8”,”4”,”-“} Parte3: 00; minimo = 12; quantidade = ? aqui depende, se a pessoa tiver digitado um numero seria 1 para inserção 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 questão faço uso da variável “fator” multiplicada ao valor 1. Quantidade = 1 * fator ; caract er = “” {"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 ve r do que seus a migos gostam.
Compartilhe
Classificações(16) Classificação média:
Deseja contribuir? Participar ouLogin
Google Friend Connect
Membros (438) Mais »
Muito bom ..rs aline vivonebonani 1/26
muito bom.. Jose Feliciano 1/5
Muito bom Andrey, Tenho um problema com o Assembly, o sistema não consegue encontrar o arquivo, tem... Mais » Coladela 12/29
Parabéns. Já é um membro? Fazer login
Jacson 12/15
Adorei o pass o a pas so, s impl es e eficiente!!!! naulila reis 12/9
Traduzir »
Inclua um comentário sobre o artigo
Próxima »
Topo
Elogios e crític as s ão muito bem vindos, porém o comentário deve ter referência ao artigo em pauta. O portal e o autor agradecem.
Nome: E-mail: Comentários:
www.linhadecodigo.com.br/Artigo.asp…
4/7
27/01/2011
C#: Máscaras Dinâmicas para textBox c…
Digite a palavra abaixo:
Para dúvidas técnicas, NÃO UTILIZE ESTE ESPAÇO, utilize nosso fórum de discussão.
http://linhadecodigo.com.br/cs2/forum
Comentários sobre o a rtigo
Ver Todos comentários
Olá, oo meu es tá dando e rro na seguinte linha... palavra = Convert.ToDouble(string.Concat(campos)).ToString(); Imp ut string was not in a correct format.
Quem enviou: Fabiano Postado em: 03/03/2010 00:00:00
Olá muito interessante essa maneira de m ascara no campo textbox, será que po deria me ajudar, estava tentando faze r uma para digitação d e endereço IP m ais não e stou tendo sucesso ou não consigo digitar corretamente, pois o cursor sempre permanece no ultimo campo ou dá erro quando o método mascaraQualquer é executado pois falta um parâmetro do array O código que estou implementado nessa classe que foi pa ssada por você é //a plica a ma sca ra n o form ato 000 .00 0.0 .00 0 public string mascaraIP() { string[] camposAux; palavra = string.Concat(campo sAux = palavra.Split('.')); limpaNumero('.', 10, 13); string[,] p artes = { { "0", "3", "." }, { "3", "3", "." }, {"6","1","."},{ "7", Co nvert.ToString(1 * fator), "" } }; mascaraQualquer(4, partes); return pa lavra; } Poderia me a judar como montar essa ma scara e o método ma scaraQualquer. Obrigado!
Quem enviou: Marcos Araujo Postado em: 28/01/2010 00:00:00 Caro, Verificando os eventos pa ra o textbox, nao encontrei o evento OnClick e nem o Keypress. Como é isso ? Abracos
Quem enviou: Neto Postado em: 14/01/2010 00:00:00 Boa Noite Jorge Armando Andrade e C orrêa, este exem plo foi muit util. obrigado
Quem enviou: Anderson Postado em: 13/01/2010 00:00:00 Olá, gostei muito do artigo e estou querendo usar, mas comigo ap areceu um problema, estou usando o VS 2008 com linguagem C# e criando uma aplicação Winsows Form, quero usar a mascara para CPF, só que quando criei a classeMascaraJa ele acusou erro no Keys.Back (The Name 'Keys' does no t exist in the current context). se a lguém puder m e ajudar ficarei agradecido.
Quem enviou: André Luiz Postado em: 30/10/2009 00:00:00 Sei q já tempo q e sse artigo existe, porém estou precisando de um a ajuda. Não estou conseguindo formar uma m áscara pa ra 4 dígitos, exemplo: 0000 Ja mex i pra la e pra ca e na da. Se alguém puder ajudar, agradeço muito.
Quem enviou: Wivison Postado em: 16/07/2009 00:00:00 Sei que já tem mais d e um ano que escreveu este artigo , m ais me ajudou muito . Fico grato.
www.linhadecodigo.com.br/Artigo.asp…
5/7
27/01/2011
C#: Máscaras Dinâmicas para textBox c… Quem enviou: Everton Postado em: 11/05/2009 00:00:00 Otima Materia. Parabens.
Quem enviou: Fabrizio Gianfratti Postado em: 02/04/2009 00:00:00 No caso de data com o ano de 4 dígitos, a más cara seria: string[,] partes = { { "0", "2", "/" }, { "2", "2", "/" }, { "4", Convert.ToString(2 + fator), "" } }; Espero ter ajudado.
Quem enviou: Rafael Cristiam Araújo Ribeiro Meaux Postado em: 12/01/2009 00:00:00 Poderia me ajudar criar a mas cara para m oeda neste formato abaixo. Texto no TextBox = 0,00 após digitar máximo numero = 999,99 após digitar minimo numero = 0,01 o resto é pad rão, como adapto e ste código abaixo para funcionar public string mascaraMoeda() { limpaNumero(',', 3, 5); string[,] p artes = { { "0", "3", "," }, { "3", C onvert.ToString(1 * fator), "" } }; mascaraQualquer(2, partes); return pa lavra; } pois o mesm o não funciona
Quem enviou: Nilton Flávio Postado em: 12/08/2008 00:00:00
Produtos rela cionados
Topo
Ainda não existem produtos relacionados.
Outros artigos do autor
Topo
Ainda não existem novos artigos para e ste autor.
Artigos rela cionados
Topo
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 Diretórios com FileSystemWatcher Trabalhando com Linq To XML parte 2: Linq vS Lambda Expression Criando arquivo XML com Linq To XML Trabalhando com cache em propriedades Concatenação de Strings Trabalhando com C LR: Stored Procedure – Segundo Passo Componente TreeView C# Criando um Windows Service Criptografando dados com C# Monitorando o consumo de memória e tempo de execução Salvando em XML Melhorando WinApps seguindo WebApps Cadastro de um C onsultório em Windows Forms, com C# e SQL Server – Parte 12 Criar ar quivo de integração com Integration Services Trabalhando com Array Params no C # Pegando o horário inicial e final do uso do Windows usando C# Como funcionam as Arrays (Matrizes) Multidimensionais no C #? Cadastro de um C onsultório em Windows Forms, com C# e SQL Server – Parte 11 Documentação de C ódigo .Net ASP.NET MVC C ustom Helpers Eval em C# c om IronRuby Trabalhando com CLR: Stored Procedure – Primeiro passo Entendendo interfaces com C # Executar aplicações em background com Agendador de Tarefas Windows ExpandoObject: dinamismo no .NET 4.0 Integração C# + Ruby Utilizando um Tipo T como parâmetro e recuperando seus valores Detectando mudanças em objetos
www.linhadecodigo.com.br/Artigo.asp…
6/7
27/01/2011
C#: Máscaras Dinâmicas para textBox c… © Copyright 2011 - Todos os Direitos Reservados a DevMedia www.devmedia.com.br | www.javafree.org | www.linhadecodigo.com.br Política de privacidade e de uso | Anuncie | Fale conosco
Share Page
Recent Activity
Recommended
www.linhadecodigo.com.br/Artigo.asp…
Like
Twitter
Digg This
Stumble It!
Chat with your fr iends
7/7