elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problema "Solo letras y espacios en un textboxt"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema "Solo letras y espacios en un textboxt"  (Leído 2,810 veces)
_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Problema "Solo letras y espacios en un textboxt"
« en: 7 Diciembre 2017, 23:38 pm »

Hola amigos tengo un problema estoy usando este codigo para que en un textbox solo se escriban "letras " y el caracter de la barra"espaciadora"
Código:
   If Char.IsLetter(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
el cual lo estoy usando en 3 textboxt 2 almenos , el problema esta que me funciona en el primero pero al querer escribir en alguno de los otros 3 textboxt automaticamente se escrie en el primer textboxt a que se debe esto :C


En línea

_CrisiS_

Desconectado Desconectado

Mensajes: 286


Ver Perfil
Re: Problema "Solo letras y espacios en un textboxt"
« Respuesta #1 en: 7 Diciembre 2017, 23:46 pm »

Ya descuri el problema era error mio en otra linea de codigo si un mod puede eliminar el mensaje gracias :3


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.809



Ver Perfil
Re: Problema "Solo letras y espacios en un textboxt"
« Respuesta #2 en: 8 Diciembre 2017, 08:21 am »

El código que has puesto tiene varios fallos de diseño:

1. El usuario puede insertar caracteres considerados como letras en la categoría Unicode, pero que no son letras como tal, como por ejemplo los símbolos "º" y "ª" (primero, primera) del Español. Aparte hay que tener en cuenta que también se puede insertar cualquier caracter considerado letra de cualquier abecedario aparte del abecedario Inglés y Español, como por ejemplo el Árabe (ej. "غ" y "ظ").

2. El usuario puede usar la combinación de teclas 'CTRL+V' para insertar cualquier otro tipo de caracter.

3. El usuario puede usar el menú contextual del control (opción "Pegar") para insertar cualquier otro tipo de caracter.



A menos que realmente quieras permitir el uso de símbolos como las que mencioné, y de letras de otras culturas (ej. Árabe), yo te sugiero que declares una variable con los caracteres que realmente quieres permitir, y arregles los otros fallos de diseño que mencioné. El resultado podría ser el siguiente:

Código
  1. Private ReadOnly allowedChars As Char() =
  2.    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZçñÇÑ ".ToCharArray()
  3.  
  4. ''' <summary>
  5. ''' Handles the <see cref="TextBox.MouseEnter"/> event of the <see cref="TextBox1"/> control.
  6. ''' </summary>
  7. ''' <param name="sender">
  8. ''' The source of the event.
  9. ''' </param>
  10. ''' <param name="e">
  11. ''' The <see cref="EventArgs"/> instance containing the event data.
  12. ''' </param>
  13. Private Sub TextBox_MouseEnter(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.MouseEnter
  14.  
  15.    Dim tb As TextBox = DirectCast(sender, TextBox)
  16.  
  17.    ' Disable default contextmenu by creating a new empty one.
  18.    If (tb.ContextMenuStrip Is Nothing) Then
  19.        tb.ContextMenuStrip = New ContextMenuStrip()
  20.    End If
  21.  
  22. End Sub
  23.  
  24. ''' <summary>
  25. ''' Handles the <see cref="TextBox.KeyPress"/> event of the <see cref="TextBox1"/> control.
  26. ''' </summary>
  27. ''' <param name="sender">
  28. ''' The source of the event.
  29. ''' </param>
  30. ''' <param name="e">
  31. ''' The <see cref="KeyPressEventArgs"/> instance containing the event data.
  32. ''' </param>
  33. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
  34.  
  35.    Select Case e.KeyChar
  36.  
  37.        Case Convert.ToChar(Keys.Enter)
  38.            ' Invoke associated action when the user press Enter key.
  39.            ' eg. Button1.PerformClick()
  40.  
  41.        Case Convert.ToChar(Keys.Back)
  42.            ' Allow backspace to delete characters.
  43.            e.Handled = False
  44.  
  45.        Case Convert.ToChar(Keys.Capital Or Keys.RButton) ' CTRL+V.
  46.            ' Allow paste from clipboard if the content does not contain illegal characters.
  47.            e.Handled = Not Clipboard.GetText().All(Function(c As Char) Me.allowedChars.Contains(c))
  48.  
  49.        Case Else
  50.            If Char.IsControl(e.KeyChar) Then
  51.                ' Allow Cut (CTRL+X), Copy (CTRL+C), Undo (CTRL+Z) and Redo (CTRL+Y).
  52.                e.Handled = False
  53.  
  54.            Else
  55.                ' Allow only allowed characters.
  56.                e.Handled = Not Me.allowedChars.Contains(e.KeyChar)
  57.  
  58.            End If
  59.  
  60.    End Select
  61.  
  62. End Sub



el cual lo estoy usando en 3 textboxt 2 almenos , el problema esta que me funciona en el primero pero al querer escribir en alguno de los otros 3 textboxt automaticamente se escrie en el primer textboxt a que se debe esto :C

Recuerda que la sentencia Handles de VB.NET nos permite suscribir un mismo controlador de eventos a varios eventos/controles a usando la siguiente sintaxis:
Código
  1. Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress
  2.    ' ...
  3. End Sub

El método TextBox_KeyPress estaría suscrito al evento TextBox.KeyPress de los controles: TextBox1, TextBox2 y TextBox3. Esto quiere decir que no necesitas declarar 3 controladores de eventos diferentes para copiar el mismo código 3 veces en cada uno de ellos...

Saludos.
« Última modificación: 8 Diciembre 2017, 08:39 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines