Hola a todos, a continuacion les detallo mi codigo para validar valores numericos decimales a un TextBox, funciona perfectamente, el unico problema es que no me toma el punto del teclado numerico, es decir cuando ingreso el valor, luego de presionar el punto se coloca el cursor luego del separador decimal (la coma). Todo barbaro pero si presiono el punto desde el teclado numerico no lo realiza. Alguien podria ver la funcion y la mascara y decirme donde tendria que modificarla para que me tome ambos puntos (el del tecleado numerico y del teclado alfabetico), de no poder realizarlo con ambos puntos que funcione con el del teclado numerico.

Muchas gracias a todos de antemano, les dejo un aporte y la pregunta
Saludos

Public Shared Function solonumeros(ByVal Kcode As Int16) As Boolean
If (Kcode >= 48 And Kcode <= 57) Or Kcode = 8 Or Kcode = 46 Or Kcode = 13 Or Kcode = 37 Or Kcode = 190 Then
Return False
Else
Return True
End If
End Function

Private Sub Mascara(ByVal Txt As TextBox, ByVal valor As Integer, Optional ByVal decimales As Integer = 2)
Txt.TextAlign = HorizontalAlignment.Right
Dim Formato As String = "#0." & StrDup(decimales, "0")
Dim Negativo As Boolean = False
If Mid(Txt.Text, 1, 1) = "-" Then
Negativo = True
End If
Txt.Text = Txt.Text.Replace(" ", "")
If valor = 46 Then 'delete()
If Txt.Text.Length = 0 Then ' se ha borrado todo
Txt.Text = "0," & StrDup(decimales, "0") 'Replicate
Txt.Tag = ""
Else
If InStr(Txt.Text, ",") = 0 Then 'SE HA BORRADO EN LA POSCION DEL PUNTO DECIMAL
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace(".", "")
Try
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - decimales) + "," + Mid(Txt.Text, Len(Txt.Text) - (decimales - 1))
Catch ex As Exception
If Txt.Text.Length = 1 Then
Txt.Text = Txt.Text + "," + StrDup(decimales, "0")
End If
End Try
Try
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception ' solo en el caso que sea negativo
Txt.Text = Txt.Text.Replace(" ", "")
Txt.Text = Txt.Text.Replace(".", "")
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace("-", "")
Txt.Text = Txt.Text + "," + StrDup(decimales, "0")
If Negativo Then
Txt.Text = "-" + Txt.Text
End If
End Try
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
Exit Sub
End If
Try
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception
Txt.Text = Txt.Text.Replace(".", "")
End Try
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
End If
If Trim(Txt.Text.Length) = 0 Or Mid(Txt.Text, 1, 1) = "." Then
Txt.Text = "0," & StrDup(decimales, "0") 'Replicate
Txt.Tag = ""
End If
Try
If (Mid(Txt.Tag, 1, 5) = "PUNTO") Then
If InStr(Txt.Tag, ",") > 0 Then ' HA LLEGADO A LA ÚLTIMA POSICION DECIMAL
If CInt(Mid(Txt.Tag, 7, 1)) >= decimales Then
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - 1)
End If
End If
End If
Txt.Text = Format(CDbl(Txt.Text), Formato)
Catch ex As Exception
Txt.Text = Txt.Text.Replace(" ", "")
Txt.Text = Txt.Text.Replace(",", "")
Txt.Text = Txt.Text.Replace(".", "")
Txt.Text = Mid(Txt.Text, 1, Len(Txt.Text) - decimales) + "," + Mid(Txt.Text, Len(Txt.Text) - decimales + 1)
Txt.Text = Format(CDbl(Txt.Text), Formato)
End Try
If valor <> 37 And valor <> 39 Then 'left rigth
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
Dim Posiciones(decimales) As String
If Mid(Txt.Tag, 1, 5) = "PUNTO" Then 'SE HA PULSADO EL PUNTO DECIMAL
Posiciones = Split(Txt.Tag, ",")
If Posiciones.Length = 1 Then
Else
Posiciones = Split(Txt.Tag, ",")
If CInt(Posiciones(1)) + 1 <= decimales Then
Txt.Tag = "PUNTO," + CStr(CInt(Posiciones(1)) + 1)
Txt.SelectionStart = Len(Txt.Text) - decimales + CInt(Posiciones(1))
Else
Txt.Tag = ""
End If
End If
End If
If valor = 190 Then 'punto decimal
Txt.SelectionStart = Len(Txt.Text) - decimales '2
Txt.Tag = "PUNTO,1"
End If
If valor = 109 Then 'menos -
If Txt.Text <> "0," & StrDup(decimales, "0") Then
If Mid(Txt.Text, 1, 1) = "-" Then
Txt.Text = Txt.Text.Replace("-", "")
Else
Txt.Text = "-" & Txt.Text
End If
Txt.SelectionStart = Len(Txt.Text) - (decimales + 1)
End If
End If
End Sub

Public Shared Function SinMascara(ByVal valor As String, Optional ByVal decimales As Integer = 2) As String
' hecho para sumar los campos el cual quita el formato y lo entrega en formato para suma
If valor.Length <= 0 Then
Return Nothing
End If
valor = valor.Replace(" ", "")
valor = valor.Replace(",", "")
valor = valor.Replace(".", "")
valor = Mid(valor, 1, Len(valor) - decimales) + "." + Mid(valor, Len(valor) - decimales + 1)
Return valor
End Function