Foros del Web » Programación para mayores de 30 ;) » .NET »

KeyChar!!!

Estas en el tema de KeyChar!!! en el foro de .NET en Foros del Web. Hola, tengo un problemilla, tengo un evento Keypress con un Textbox y un Boton en Visual .Net y resulta que quiero guardar lo que el ...
  #1 (permalink)  
Antiguo 20/01/2010, 17:04
Avatar de molinojopiento  
Fecha de Ingreso: septiembre-2004
Mensajes: 128
Antigüedad: 19 años, 8 meses
Puntos: 1
KeyChar!!!

Hola, tengo un problemilla, tengo un evento Keypress con un Textbox y un Boton en Visual .Net y resulta que quiero guardar lo que el cliente presione (Solo numeros) en una variable. Luego hacer un acumulador que termine cuando el cliente presione el boton, hize esto pero no me resulta se me queda pegado.


Código:
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        Dim x As Char
        Dim m As Integer
        m = 0
        Do
            x = x + e.KeyChar
            MsgBox(x)

            If (Button1.Handle = True) Then
                m = 1

            End If
        Loop While (m = 1)

    End Sub

Espero de su ayuda...gracias. :D
__________________
:-D algun dia sere el mejor....... :aplauso:
  #2 (permalink)  
Antiguo 20/01/2010, 18:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: KeyChar!!!

1. Las variables de método nace y mueren en una ejecución del método (el evento en este caso), por lo que jamás se acumulará nada que te sirva. Para ello tienen que ser variables de clase (del formulario), o bien globales (de la aplicación).
2. Poner un loop en un método de evento no tiene ningún sentido, porque una vez que entre permanecerá en ese método sin hacer otra cosa, hasta salir del loop.
3. En todo caso lo que debes aclarar es qué es lo que se supone que quieres que se acumule, y también para qué se supone que haces ese loop, porque muy bien no se entiende.

Es posible que lo que tu quieres hacer sea algo que se implemente por Threads, o bien simplemente por variables de clase.
En cualquier caso, exiplica un poco mejor el sentido de esto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 21/01/2010, 06:21
Avatar de molinojopiento  
Fecha de Ingreso: septiembre-2004
Mensajes: 128
Antigüedad: 19 años, 8 meses
Puntos: 1
Respuesta: KeyChar!!!

Aver, tengo un Texbox quiero que los numeros que se ingresen en ese texbox se guarden en una variable distinta. Eso!
__________________
:-D algun dia sere el mejor....... :aplauso:
  #4 (permalink)  
Antiguo 21/01/2010, 07:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: KeyChar!!!

1. Crea un Acumulador como variable de clase (del formulario):
Código vb.Net:
Ver original
  1. Private acumularNum As Integer
2. Filtra los números en el evento KeyPress.
Si quieres que acumule de a uno los números ingresados:
Código vb.net:
Ver original
  1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.         Dim KeyAscii As Short = CShort(Asc(e.KeyChar))
  3.         If InStr("1234567890", Chr(Keyascii)) = 0 Then
  4.             e.Handled = True
  5.         Else
  6.             acumularNum += CInt(Chr(Keyascii))
  7.         End If
  8.   End Sub
Si quieres que sólo los sume (completos) cuando presiones <Enter>:

Código vb.net:
Ver original
  1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  2.         Dim KeyAscii As Short = CShort(Asc(e.KeyChar))
  3.         If InStr("1234567890", Chr(Keyascii)) = 0 Then
  4.             e.Handled = True
  5.         Else
  6.             If e.KeyChar = ControlChars.Cr And TextBox1.Text <> ""  Then
  7.                   acumNum + = CInt(TextBox1.Text)
  8.             End If
  9.         End If
  10.   End Sub

Mas o menos así...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/01/2010, 08:24
Avatar de molinojopiento  
Fecha de Ingreso: septiembre-2004
Mensajes: 128
Antigüedad: 19 años, 8 meses
Puntos: 1
Respuesta: KeyChar!!!

Perfecto muchas gracias !!! .... :)

Yo hice algo como esto.
Cita:
Public Class Form1
Dim x As Char
Dim uno, m, a As Integer


Public Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
Do
x = e.KeyChar

Select Case x
Case "0"
uno = CInt(Val(x))
a = a + uno
Case "1"
uno = CInt(Val(x))
a = a + uno
Case "2"
uno = CInt(Val(x))
a = a + uno
Case "3"
uno = CInt(Val(x))
a = a + uno
Case "4"
uno = CInt(Val(x))
a = a + uno
Case "5"
uno = CInt(Val(x))
a = a + uno
Case "6"
uno = CInt(Val(x))
a = a + uno
Case "7"
uno = CInt(Val(x))
a = a + uno
Case "8"
uno = CInt(Val(x))
a = a + uno
Case "9"
uno = CInt(Val(x))
a = a + uno

End Select
Loop While (m = 1)


End Sub




Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
m = 0
a = 0
End Sub


Public Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
m = 1
MsgBox(a)

End Sub
End Class
Gracias!!!! Me ahorro mucho codigo con tu algoritmo ;)
__________________
:-D algun dia sere el mejor....... :aplauso:
  #6 (permalink)  
Antiguo 21/01/2010, 08:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: KeyChar!!!

Me alegra que te sirva.
Yo había implementado algo parecido para controlar las entradas en números enteros.
Faltaría mejorarlo para que tome bien los decimales, per la idea anda por allí.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.