Usuário com melhor resposta
Problema com Controle MaskedTextBox (somente números)

Pergunta
-
Estou criando um componete para servir para todo o sistema, logo estou fazendo um user control MaskedTextBox. Estou criando todos os métodos para ele, mas estou encontrando uma certa dificuldade em permitir apenas apenas números, segue os eventos que já criei.
Obs: Este controle tem o seguinte comportamento, quando o usuário clicar,eu removo toda a formatação (igual no excel), e quando ele sai eu formato novamente, mas mesmo sem a mascara tenho que continuar a validar e permitir inserir o que foi definido via configuração.
private void InitializeComponent() { //Quando sai do controle this.Leave += new System.EventHandler(this.OnLeave); //Quando Clica no controle this.Click += new System.EventHandler(this.OnClick); //Quando digita no controle this.KeyPress += this.OnKeyPress; //Quando sai do controle this.LostFocus += new EventHandler(MaskedTextBox1_LostFocus); } void MaskedTextBox1_LostFocus(object sender, EventArgs e) { this.Mask = ""; } public void ConfigMascaraParaTipoDados() { switch (TipoDados) { case TipoDados.Default: this.Mask = "#######-##"; break; case TipoDados.Quantidade: this.Mask = "#(###)#"; break; case TipoDados.Moeda: this.Mask = "###.####.##"; break; case TipoDados.Variacao: this.Mask = "(####)#######-##"; break; case TipoDados.Customizado: break; } } void MaskedTextBox1_LostFocus(object sender, EventArgs e) { this.Mask = ""; } private void OnLeave(object sender, EventArgs e) { ConfigMascaraParaTipoDados(); } public void OnClick(object sender, EventArgs e) { this.Mask = ""; } public void OnKeyPress(object sender, KeyPressEventArgs e) { //Verificando se é um número if (!Char.IsDigit(e.KeyChar) && e.KeyChar != (char)8) { int total = 50; switch (TipoDados) { case TipoDados.Default: //this.Mask = "#######-##"; total = 8; break; case TipoDados.Quantidade: //this.Mask = "#(###)#"; total = 4; break; case TipoDados.Moeda: //this.Mask = "###.####.##"; total = 7; break; case TipoDados.Variacao: //this.Mask = "(####)#######-##"; total = 12; break; case TipoDados.Customizado: break; } if (this.Text.Length > total) e.Handled = true; if (this.SelectedText.Length <= 0 && this.Text.Length > total) e.Handled = true; else e.Handled = false; } }
Benjamim JR.
Respostas
-
Se queres apenas numeros põe assim no OnKeyPress
//Verificando se é um número if (Char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(8)) { int total = 50; switch (TipoDados) { case TipoDados.Default: //this.Mask = "#######-##"; total = 8; break; case TipoDados.Quantidade: //this.Mask = "#(###)#"; total = 4; break; case TipoDados.Moeda: //this.Mask = "###.####.##"; total = 7; break; case TipoDados.Variacao: //this.Mask = "(####)#######-##"; total = 12; break; case TipoDados.Customizado: break; } if (this.Text.Length > total) e.Handled = true; if (this.SelectedText.Length <= 0 && this.Text.Length > total) e.Handled = true; else e.Handled = false; } else { e.Handled = true; }
msn: poseidonfba@hotmail.com- Marcado como Resposta Benjamim Marcos de Castro Junior terça-feira, 1 de junho de 2010 23:56
-
Ai você pode fazer no evento TextChanged
msn: poseidonfba@hotmail.com- Marcado como Resposta Benjamim Marcos de Castro Junior quarta-feira, 2 de junho de 2010 10:27
Todas as Respostas
-
Se queres apenas numeros põe assim no OnKeyPress
//Verificando se é um número if (Char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(8)) { int total = 50; switch (TipoDados) { case TipoDados.Default: //this.Mask = "#######-##"; total = 8; break; case TipoDados.Quantidade: //this.Mask = "#(###)#"; total = 4; break; case TipoDados.Moeda: //this.Mask = "###.####.##"; total = 7; break; case TipoDados.Variacao: //this.Mask = "(####)#######-##"; total = 12; break; case TipoDados.Customizado: break; } if (this.Text.Length > total) e.Handled = true; if (this.SelectedText.Length <= 0 && this.Text.Length > total) e.Handled = true; else e.Handled = false; } else { e.Handled = true; }
msn: poseidonfba@hotmail.com- Marcado como Resposta Benjamim Marcos de Castro Junior terça-feira, 1 de junho de 2010 23:56
-
-
-
-
-
-
Ai você pode fazer no evento TextChanged
msn: poseidonfba@hotmail.com- Marcado como Resposta Benjamim Marcos de Castro Junior quarta-feira, 2 de junho de 2010 10:27
-
-
Olá Benjamim,
você pode usar o isso no evento KeyPress do textbox.
Ex.'método que recebe o objeto para a validação dos campos Private Sub Validar(ByVal dado As Object) If Char.IsLetter(dado.KeyChar.ToString) Then dado.handled = True End If End Sub 'no evento KeyPress, será enviando para o método o evento para verificar se é letra, caso vdd retorna handled = true Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _ Handles TextBox1.KeyPress Validar(e) End Sub
Neste caso o método está validando somente números, caso queira usar para validar somente letras, troque no método o Char.IsLetter para Char.IsNumber.
O tamanho máximo você pode usar o textbox1.text.lenght = 14, só aceita até 14. Ou na propriedado do textbox1, altere o MaxLenght para um tamanho específico.
Espero ter ajudado.