APENAS DOIS NÊMEROS APÓS A VÍRGULA

RICARDOCENTENO 15/04/2015 21:16:49
#445949
Olá boa noite a todos.

Estou com um problema em um textbox. Eu bloquei no evento Keypress apenas para digitar números e o caractere vírgula. Porém há um erro na minha aplicação em que eu não posso dexar digtar vírgula no início do campo, apenas após a digitaçaõ do número. Também quero que após a digitação da virgula, sejam digitados apenas dois números ou quantos em quiser configuar.
Como proceder?
FILMAN 15/04/2015 22:08:16
#445951
Resposta escolhida
O que você já fez? Mostre aqui!
OMAR2011 16/04/2015 08:51:28
#445954
Acredito que está procurando por isto.
Veja.
https://sites.google.com/site/programacaoonline/family-blog/vb-net/textbox-com-mascara-moeda-em-vb-net
RICARDOCENTENO 16/04/2015 14:02:35
#445957
Olá OMAR2011 e Filman irei testar, mas eu queria algo mais simples. Estou usando o código abaixo e gostaria de incluir a função que não aceite a vírgula no começo sem antes ter ao menos um número como também aceitar apenas dois dígitos depois da vírgula.

 Private Sub TXTNOTA1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TXTNOTA1.KeyPress
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = Convert.ToChar(Keys.Back) And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If
If e.KeyChar = [Ô],[Ô] And InStr(TXTNOTA1.Text, [Ô],[Ô]) > 0 Then
e.Handled = True
End If

End Sub


Mesmo assim obrigado pela ajuda.
NILSONTRES 16/04/2015 18:30:42
#445964
Public Function SoNumeros(ByRef Key As Short) As Short
Const Numeros As String = [Ô]012345,6789[Ô]
SoNumeros = Key
If Key <> 8 Then
If InStr(Numeros, Chr(Key)) = 0 Then
SoNumeros = 0
End If
End If
End Function
[ô]*********************************
Dim sQtdeVirgulas As Object
Private Sub TXT_CUSTO_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TXT_CUSTO.KeyPress
Dim KeyAscii As Short = Asc(e.KeyChar)
KeyAscii = SoNumeros(KeyAscii)
e.KeyChar = Chr(KeyAscii)
If KeyAscii = 0 Then
e.Handled = True
End If
sQtdeVirgulas = Split(TXT_CUSTO.Text, [Ô],[Ô])
If UBound(sQtdeVirgulas) = 1 Then
If KeyAscii = 44 Or KeyAscii = 46 Then

MsgBox([Ô]ERRO DE DIGITAÇÃO[Ô], MsgBoxStyle.Critical, [Ô]ERRO[Ô])
KeyAscii = 0
End If
End If

If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 46 And KeyAscii <> 44 And KeyAscii <> 13 And KeyAscii <> 8 Then KeyAscii = 0
e.KeyChar = Chr(KeyAscii)
If KeyAscii = 0 Then
e.Handled = True
End If
End Sub
RICARDOCENTENO 16/04/2015 20:15:58
#445970
Citação:

:
Public Function SoNumeros(ByRef Key As Short) As Short
Const Numeros As String = [Ô]012345,6789[Ô]
SoNumeros = Key
If Key <> 8 Then
If InStr(Numeros, Chr(Key)) = 0 Then
SoNumeros = 0
End If
End If
End Function
[ô]*********************************
Dim sQtdeVirgulas As Object
Private Sub TXT_CUSTO_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TXT_CUSTO.KeyPress
Dim KeyAscii As Short = Asc(e.KeyChar)
KeyAscii = SoNumeros(KeyAscii)
e.KeyChar = Chr(KeyAscii)
If KeyAscii = 0 Then
e.Handled = True
End If
sQtdeVirgulas = Split(TXT_CUSTO.Text, [Ô],[Ô])
If UBound(sQtdeVirgulas) = 1 Then
If KeyAscii = 44 Or KeyAscii = 46 Then

MsgBox([Ô]ERRO DE DIGITAÇÃO[Ô], MsgBoxStyle.Critical, [Ô]ERRO[Ô])
KeyAscii = 0
End If
End If

If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 46 And KeyAscii <> 44 And KeyAscii <> 13 And KeyAscii <> 8 Then KeyAscii = 0
e.KeyChar = Chr(KeyAscii)
If KeyAscii = 0 Then
e.Handled = True
End If
End Sub



Olá, obrigado pela resposta.
Seu código faz exatamente a mesma coisa que o meu código acima, porém em ambos casos, há uma falha que permite digitar a vírgula no começo do textbox sem ter nenhum número preenchido e também não trava em dois números digitados após a vírgula.
FILMAN 16/04/2015 21:48:45
#445974
Bom vamos lá!

Entendo assim se o usuário digitar a virgula primeiro eu colocaria um número zero na frente, pois até mesmo se você ver uma calculadora permite isso!

Então vamos tratar:
A virgula como primeiro carácter;
O backspace;
O carácter vírgula e somente números digitados;


No KeyPress do TextBox coloque o código abaixo?

        [ô]Verificar se esta digitando somente núemros / BackSpace / Vírgula
If Not Char.IsDigit(e.KeyChar) And Not e.KeyChar.Equals(Chr(Keys.Back)) And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If

[ô]Verificar se a tecla não é BackSpace e seja Vírgula, porém que não contenha uma vírgula digitada
If Not e.KeyChar.Equals(Chr(Keys.Back)) And e.KeyChar = [Ô],[Ô] And TextBox1.Text.Contains([Ô],[Ô]) Then
e.Handled = True
End If

[ô]Verificar se a vírgula é o primeira carácter e coloca o zero na frente
If Not e.KeyChar.Equals(Chr(Keys.Back)) And e.KeyChar = [Ô],[Ô] And TextBox1.TextLength = 0 Then
TextBox1.Text = [Ô]0,[Ô]
TextBox1.Select(TextBox1.TextLength, 0)

e.Handled = True
End If


Portanto o resto da tratativa fica por conta sua!

Espero ter ajudado!
RICARDOCENTENO 17/04/2015 14:40:04
#445983
Citação:

:
Bom vamos lá!

Entendo assim se o usuário digitar a virgula primeiro eu colocaria um número zero na frente, pois até mesmo se você ver uma calculadora permite isso!

Então vamos tratar:
A virgula como primeiro carácter;
O backspace;
O carácter vírgula e somente números digitados;


No KeyPress do TextBox coloque o código abaixo?

        [ô]Verificar se esta digitando somente núemros / BackSpace / Vírgula
If Not Char.IsDigit(e.KeyChar) And Not e.KeyChar.Equals(Chr(Keys.Back)) And Not e.KeyChar = [Ô],[Ô] Then
e.Handled = True
End If

[ô]Verificar se a tecla não é BackSpace e seja Vírgula, porém que não contenha uma vírgula digitada
If Not e.KeyChar.Equals(Chr(Keys.Back)) And e.KeyChar = [Ô],[Ô] And TextBox1.Text.Contains([Ô],[Ô]) Then
e.Handled = True
End If

[ô]Verificar se a vírgula é o primeira carácter e coloca o zero na frente
If Not e.KeyChar.Equals(Chr(Keys.Back)) And e.KeyChar = [Ô],[Ô] And TextBox1.TextLength = 0 Then
TextBox1.Text = [Ô]0,[Ô]
TextBox1.Select(TextBox1.TextLength, 0)

e.Handled = True
End If


Portanto o resto da tratativa fica por conta sua!

Espero ter ajudado!



Olá Filman. Anexei apenas a última parte no código, obrigado pela dica do zero. Por falar nele como eu faria para colocar apenas dois números após a vírgula?
RICARDOCENTENO 22/04/2015 19:39:19
#446091
Ninguém?
FILMAN 24/04/2015 01:22:37
#446114
Ola, desculpa a demora, mas como deve saber nossa vida é corrida!

você pode fazer assim:
        If Not e.KeyChar.Equals(Chr(Keys.Back)) And TextBox1.Text.Contains([Ô],[Ô]) Then
Dim count As String() = TextBox1.Text.Split([Ô],[Ô])
If count(1).Length = 2 Then
e.Handled = True
End If
End If
FILMAN 06/05/2015 00:45:44
#446401
Se o problema foi resolvido, por favor encerre o tópico.

Obrigado
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas