En este artículo veremos dos ejemplos para limitar la entrada de un TextBox sólo a números, teniendo en cuenta el separador decimal del PC huésped.
Ejemplo 1
La manera más simple para limitar la entrada en un textbox la veremos a continuación:
- Abre un nuevo proyecto Windows Forms
- En el formulario agrega:
- Un textbox
- Una etiqueta
- Un botón
Luego pega este condigo:
Public Class Form1
Dim Sep As Char
Dim Número As Double
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Número = CDbl(TextBox1.Text)
Etiqueta1.Text = Número
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles My
Base.Load
'Detectar el separador decimal de la aplicación.
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
TextBox1.Focus()
End Sub
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPres
sEventArgs) Handles TextBox1.KeyPress
If Not (Char.IsNumber(e.KeyChar) Or e.KeyChar.Equals(Sep) Or Char.IsControl(e.KeyChar)) Then e.Handled = True
End Sub
End Class
Ejemplo 2
Sin embargo, la solución 1 no es la más comoda para el usuario.
Efectivamente, el separador decimal está condicionado a la configuración del PC huésped, esto podría ocasionar, por ejemplo, tener que teclear la coma del teclado alfanumérico si la aplicación no ha cambiado el punto del teclado decimal a coma (si es necesario una coma).
La ventaja de esta segunda solución es que el usuario puede teclear a su elección, un punto o una coma, el código lo corrige en función del PC.
- Agrega un segundo formulario con los mismos componentes
- Pega este código:
Public Class Form2
Dim Sep As Char
Dim Nombre As Double
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Applique()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles My
Base.Load
'Detectar el separador decimal de la aplicación.
Sep = Application.CurrentCulture.NumberFormat.NumberDecimalSeparator
End Sub
Private Sub Data_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs
) Handles Data.KeyDown
If e.KeyCode = 13 Then
Aplica()
End If
End Sub
Private Sub Data_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Hand
les Data.TextChanged
If Data.Text = Sep Then
'si el separador decimal es tecleado directamente
Data.Text = "0" & Sep
Data.SelectionStart = Len(Data.Text)
ElseIf Not IsNumeric(Trim(Data.Text)) Then
Beep()
If Len(Data.Text) < 1 Then
Data.Text = ""
Else
Data.Text = Microsoft.VisualBasic.Left(Data.Text, Len(Data.Text) - 1)
Data.SelectionStart = Len(Data.Text)
End If
End If
End Sub
Sub Aplica()
Dim DT As String
'Para adaptar a la configuracion del PC huesped.
DT = Replace(Data.Text, ".", Sep)
DT = Replace(DT, ",", Sep)
Label1.Text = CDbl(DT)
On Error Resume Next
Data.SelectionStart = 0
Data.SelectionLength = Len(Data.Text)
Data.Focus()
End Sub
End Class
e esperamos en la segunda parte del artículo en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.



