¿Te gustaría aprender .NET?
Tenemos los cursos que necesitas.¡Haz clic aquí!

 

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.

¿Te gustaría aprender .NET?
Tenemos los cursos que necesitas.¡Haz clic aquí!
About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
0 Comments
Comentarios.
Ver todos los comentarios
0
¿Te gusta este articulo? por favor comentax
()
x
Abrir chat
¿Quieres aprender a programar?
Hola 👋,
¿Te interesa información de nuestros cursos?