none
Control de textos

    Pregunta

  • Hola expertos,

    Estoy controlando los caracteres que admite una caja de texto, pero me he encontrado con algo que no había previsto y no sé solucionar. ¿Cómo hago para que me acepte la letra U con diéresis, es decir Ü, puesto que se hace en dos pulsaciones sucesivas: diéresis (ASCII 168) y luego la vocal (U – 85, u – 117)?

    Adjunto el código que estoy usando para mayor claridad.

    Gracias y saludos

        Private Sub TextoTecla(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _

                                Handles txtAutor.KeyPress, txtEditora.KeyPress, txtLibro.KeyPress, _

                                        txtRecomCom.KeyPress, txtRecomEn.KeyPress, txtRecomPor.KeyPress

            If TeclaTodo(Asc(e.KeyChar)) = False Then

                e.Handled = False

            Else

                e.Handled = True

            End If

        End Sub

        Friend Function TeclaTodo(ByVal Pulsado As Integer) As Boolean

            Select Case Pulsado

                Case 8, 13, 32                                  'Acción: Borra, Intro, Espacio

                    TeclaTodo = False

                Case 48 To 57                                   'Números: 0 a 9

                    TeclaTodo = False

                Case 65 To 90                                   'Vocales A - Z: mayúsculas

                    TeclaTodo = False

                Case 97 To 122                                  'Vocales a - z: minúsculas

                    TeclaTodo = False

                Case 129, 154,193, 201, 205, 211, 218, 225, 233, 237, 243, 250 'Vocales acentuadas

                    TeclaTodo = False

                Case 209, 241                                   'Consonantes españolas: ñ y Ñ

                    TeclaTodo = False

                Case 94, 96, 168, 180                           'Acentos: ^ ` ¨ ´

                    TeclaTodo = False

                Case 38, 40, 41, 44, 45, 46, 47, 58, 61, 64, 95, 128 'Signos especiales: & ( ) , - . / : @ = _ €

                    TeclaTodo = False

                Case Else

                    TeclaTodo = True

                    MessageBox.Show("Has pulsado algo extraño o no permitido... " & vbCrLf _

                        & vbCrLf & "Por favor, repite lo que ibas a escribir. ", _

                        (ApliNombre & BarraMensa), MessageBoxButtons.OK, MessageBoxIcon.Error)

            End Select

        End Function


    • Editado Odisea 2001 sábado, 24 de septiembre de 2016 10:21
    sábado, 24 de septiembre de 2016 9:40

Respuestas

  • "Odisea 2001" preguntó:

    > Cómo hago para que me acepte la letra U con diéresis, es decir Ü, puesto que
    > se hace en dos pulsaciones sucesivas: diéresis (ASCII 168) y luego la vocal
    > (U – 85, u – 117)?

    Hola:

    Aunque se haga con dos pulsaciones sucesivas, el carácter (Char) es uno solo. En el Select Case que aparece en tu procedimiento TeclaTodo, inserta los siguiente Case:

                Case 196, 203, 207, 214, 220    ' Vocales Ä - Ü: mayúsculas con diéresis
                   
                Case 228, 235, 239, 246, 252    ' Vocales ä - ü: minúsculas con diéresis
                   
    Y para que observes que funciona, en el evento KeyPress de cualquier control TextBox inserta lo siguiente:

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
            Dim pulsado As Integer = Asc(e.KeyChar)
    
            Select Case pulsado
                Case 196, 203, 207, 214, 220    ' Vocales mayúsculas con diéresis
                    MessageBox.Show(e.KeyChar)
    
                Case 228, 235, 239, 246, 252    ' Vocales minúsculas con diéresis
                    MessageBox.Show(e.KeyChar)
    
                Case Else
                    MessageBox.Show("Otra letra sin diéresis")
                    e.Handled = True
    
            End Select
    
        End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    sábado, 24 de septiembre de 2016 16:52
    Moderador

Todas las respuestas

  • "Odisea 2001" preguntó:

    > Cómo hago para que me acepte la letra U con diéresis, es decir Ü, puesto que
    > se hace en dos pulsaciones sucesivas: diéresis (ASCII 168) y luego la vocal
    > (U – 85, u – 117)?

    Hola:

    Aunque se haga con dos pulsaciones sucesivas, el carácter (Char) es uno solo. En el Select Case que aparece en tu procedimiento TeclaTodo, inserta los siguiente Case:

                Case 196, 203, 207, 214, 220    ' Vocales Ä - Ü: mayúsculas con diéresis
                   
                Case 228, 235, 239, 246, 252    ' Vocales ä - ü: minúsculas con diéresis
                   
    Y para que observes que funciona, en el evento KeyPress de cualquier control TextBox inserta lo siguiente:

        Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
            Dim pulsado As Integer = Asc(e.KeyChar)
    
            Select Case pulsado
                Case 196, 203, 207, 214, 220    ' Vocales mayúsculas con diéresis
                    MessageBox.Show(e.KeyChar)
    
                Case 228, 235, 239, 246, 252    ' Vocales minúsculas con diéresis
                    MessageBox.Show(e.KeyChar)
    
                Case Else
                    MessageBox.Show("Otra letra sin diéresis")
                    e.Handled = True
    
            End Select
    
        End Sub

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    sábado, 24 de septiembre de 2016 16:52
    Moderador
  • Hola Enrique,

    Como siempre, tan didáctico. También veo que me ha faltado mirar con algo más de atención la tabla de códigos ASCII.

    Muchas gracias.

    domingo, 25 de septiembre de 2016 8:57