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 MyBase.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.KeyPressEventArgs) 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 MyBase.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) Handles 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
Te 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.