Olá, pessoal, hà alguns dias atrás, eu postei aqui uma dúvida sobre como transformar uma função que eu tinha em VB 6 para o VB.NET na qual eu digitava os valores e a vírgula e o ponto apareciam automaticamente.
Pois, não é que depois de muito tempo e muita dedicação eu consegui uma forma de fazer isso. Pode ser que precise de alguma implementação, mas para quem está começando agora com o VB.NET até que já é um bom passo dado. Eis a forma que eu fiz:
No módulo:
Imports str = Microsoft.VisualBasic.Strings
Imports System.Windows.Forms.TextBox
Function CampoValor(ByVal obj As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
If Len(obj.Text) = 10 Then
e.KeyChar = ""
e.Handled = False
Exit Function
End If
If Len(obj.Text) = obj.SelectionLength Then
If e.KeyChar = Chr(13) Or e.KeyChar = Chr(27) Then
Exit Function
Else
obj.Clear()
Exit Function
End If
End If
If e.KeyChar = Chr(8) Then
' se campo for vazio, não faz nada
If Len(obj.Text) = 0 Then
Exit Function
Else
' deleta o número à esquerda do cursor
obj.Text = str.Left(obj.Text, Len(obj.Text) - 1)
obj.SelectionStart = Len(obj.Text)
End If
End If
If Not IsNumeric(e.KeyChar) Then
e.KeyChar = ""
Else
If Len(obj.Text) > 1 Then
obj.Text = str.Replace(obj.Text, ",", "")
obj.Text = str.Left(obj.Text, Len(obj.Text) - 1) & "," & str.Right(obj.Text, 1)
obj.SelectionStart = Len(obj.Text)
End If
If Len(obj.Text) = 6 Then
obj.Text = str.Replace(obj.Text, ",", "")
obj.Text = str.Mid(obj.Text, 1, 1) & "." & str.Mid(obj.Text, 2, 3) & "," & str.Mid(obj.Text, 5, 2)
obj.SelectionStart = Len(obj.Text)
End If
If Len(obj.Text) = 8 Then
obj.Text = str.Replace(obj.Text, ",", "")
obj.Text = str.Replace(obj.Text, ".", "")
obj.Text = str.Mid(obj.Text, 1, 2) & "." & str.Mid(obj.Text, 3, 3) & "," & str.Mid(obj.Text, 6, 2)
obj.SelectionStart = Len(obj.Text)
End If
If Len(obj.Text) = 9 Then
obj.Text = str.Replace(obj.Text, ",", "")
obj.Text = str.Replace(obj.Text, ".", "")
obj.Text = str.Mid(obj.Text, 1, 3) & "." & str.Mid(obj.Text, 4, 3) & "," & str.Mid(obj.Text, 7, 2)
obj.SelectionStart = Len(obj.Text)
End If
End If
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "." And Not e.KeyChar = "," Then
e.Handled = True
End If
End Function
End Module
Para chamar a função, no evento KeyPress da TextBox, digita a linha:
CampoValor(TextBox1, e)
onde TextBox1 é a TextBox que receberá a digitação.
Espero ter ajudado alguém com essa função.
Até mais.