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.