none
Hacer un TextBox que sólo acepte números en aplicaciones para Tienda Windows (VB.NET)

    Question

  • Hola, pues desde hace días estoy intentando lograr un TextBox que sólo me acepte números, y de ser posible que agregue los guiones correspondientes al número de cédula. Anteriormente hacía esto con un MaskedTextBox y dándole la propiedad mask, pero me doy la sorpresa de que ya no existe en esta versión de Visual Studio 2012 (O por lo menos para Tienda Windows)

    Intenté hacer una función de este tipo:

       Private Function isCharNumeral(ByVal c As Char) As Boolean
            If (c >= "0"c AndAlso c <= "9"c) Then
                Return True
            End If
            Return False
        End Function

    Se supone que KeyPress tiene 

    ByVal e as KeyPressEventArgs

    Y podría decir

    If isCharNumeral(e.KeyChar) = False Then
    e.Handled = True
    End If

    O haciéndolo más sencillo, sin utilizar la función:

    If Char.IsDigit(e.KeyChar) Then
    e.Handled = False
    Else
    e.Handled = True
    End If

    Paro ahora resulta que el evento KeyPress de un TextBox ¡Ya no existe!, Sólo KeyDown y KeyUp

    Ahora, si ni siquiera se puede aceptar sólo números, me imagino que tampoco puedo hacer que el TextBox automáticamente agregue guiones de esta manera: 1-2345-6789

    ¿Alguna idea de qué podría hacer para aceptar sólo números? Y, de ser posible aplicarle el formato 1-2345-6789

    Gracias de antemano


    Monday, December 31, 2012 4:22 PM

Answers

  • Hola yo hace tiempo también tenia el mismo problema pero lo pude resolver implementando el siguiente método

      Private Async Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
            Dim msgbox As New Windows.UI.Popups.MessageDialog("Es un numero")
            Dim num As Integer
            Dim isNumeric As Boolean = Integer.TryParse(txtNum.text, num)'//Hacemos la conversión 
            If isNumeric Then
    
                Await msgbox.ShowAsync()
    
            Else
                msgbox.Content = "No es un numero"
                Await msgbox.ShowAsync()
    
            End If
    
        End Sub

    también puedes modificar el inputscope de tu textbox desde xaml

    algo asì

    <TextBox x:Name="txtnum" HorizontalAlignment="Left" Margin="160,210,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" InputScope="Number"/>
    espero y te sirva :)


    Saludos desde México DF

    Thursday, January 03, 2013 7:46 PM

All replies

  • Anteriormente hacía esto con un MaskedTextBox y dándole la propiedad mask, pero me doy la sorpresa de que ya no existe en esta versión de Visual Studio 2012

    pero que tipo de aplciacion estas desarrollando ? es una palicaicon Moder UI

    proque debs aclararlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    Monday, December 31, 2012 4:55 PM
  • Hola Leandro, La aplicación es tipo Metro, la página es para matricular un nuevo estudiante en una escuela de música, pero se necesita ingresar el número de identificación del estudiante.

    Saludos!

    Monday, December 31, 2012 6:46 PM
  • Hola yo hace tiempo también tenia el mismo problema pero lo pude resolver implementando el siguiente método

      Private Async Sub Button_Click_1(sender As Object, e As RoutedEventArgs)
            Dim msgbox As New Windows.UI.Popups.MessageDialog("Es un numero")
            Dim num As Integer
            Dim isNumeric As Boolean = Integer.TryParse(txtNum.text, num)'//Hacemos la conversión 
            If isNumeric Then
    
                Await msgbox.ShowAsync()
    
            Else
                msgbox.Content = "No es un numero"
                Await msgbox.ShowAsync()
    
            End If
    
        End Sub

    también puedes modificar el inputscope de tu textbox desde xaml

    algo asì

    <TextBox x:Name="txtnum" HorizontalAlignment="Left" Margin="160,210,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" InputScope="Number"/>
    espero y te sirva :)


    Saludos desde México DF

    Thursday, January 03, 2013 7:46 PM
  • Otra opciones, a mi parecer más dinámica porque podemos incluír la función en un módulo llamandola desde cada TextBox. Además verifica que el símbolo decimal sea el PUNTO y que NO SE REPITA.

    ---------------------------------------------------------------------

    KEYPRESS DEL TEXTBOX

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

            e.Handled = IntegridadNumerica(e.KeyChar, TextBox1.Text)

        End Sub

    LA FUNCION A LA QUE LLAMA

        Public Function IntegridadNumerica(Caracter As Char, ContenidoTextBox As String) As Boolean

            If Char.IsControl(Caracter) Then
                IntegridadNumerica = False
            ElseIf Asc(Caracter) = 46 Then
                If InStr(ContenidoTextBox, ".") = 0 Then
                    IntegridadNumerica = False
                Else
                    IntegridadNumerica = True
                End If
            ElseIf Char.IsDigit(Caracter) Then
                IntegridadNumerica = False
            Else
                IntegridadNumerica = True
            End If

        End Function

    ---------------------------------------------------------------------

    Espero haber aportado otro ángulo.

    Saludos desde Argentina.

    Renzo.

    Thursday, April 03, 2014 6:46 PM