TEXTBOX CONDICAO PARA USAR CARACTERES

SPEED369 22/12/2012 21:54:49
#416344
Olá, sou novo no fórum, se cometi algum erro, me avisem.

Bom, to criando um programa com o visual basic, uma especie de calculadora onde o usuário digita apenas números nos textboxs criados, eu filtrei ele para apenas aceitar números, backspack e virgula, o código posto logo abaixo, caso for preciso, eu queria saber se tem possibilidade de [Ô]filtrar[Ô] a virgula para apenas ser possível digitar uma vez, e caso possível também, para dar apenas pra colocar ela no segundo algarismo do textbox ou mais (porque não existe virgula no começo, né? ^^), ou ao menos se colocar a virgula no começo, ao clicar no botão, entra automaticamente um zero antes dela.


Bom, o código que uso é esse (módulo):

 Module ValidaTextBox
Function SoNumeros(ByVal Keyascii As Short) As Short
If InStr([Ô]1234567890,[Ô], Chr(Keyascii)) = 0 Then
SoNumeros = 0
Else
SoNumeros = Keyascii
End If

Select Case Keyascii
Case 8
SoNumeros = Keyascii
End Select
End Function
End Module


E nos textboxs:

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Dim KeyAscii As Short = CShort(Asc(e.KeyChar))

KeyAscii = CShort(SoNumeros(KeyAscii))

If KeyAscii = 0 Then

e.Handled = True

End If
End Sub


Peguei eles em algum lugar que não me recordo e os modifiquei, tentei pesquisar de varias maneiras essa minha dúvida e não encontrei nada. Obrigado antecipadamente.
NILSONTRES 23/12/2012 15:31:46
#416352
Resposta escolhida
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_VLR_PREV_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TXT_VLR_PREV.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_VLR_PREV.Text, [Ô],[Ô])
If UBound(sQtdeVirgulas) = 1 Then
[ô]MsgBox(KeyAscii)
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
SPEED369 23/12/2012 16:29:24
#416353
Opa, esse código pegou direitinho, obrigado Nilson, e um feliz natal, estarei encerrando o tópico.
Tópico encerrado , respostas não são mais permitidas