Visual Basic.NET - Desactivar lectura por teclado

 
Vista:
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 29/01/2019 19:32:22
Por favor, necesito desactivar en un objeto TextBox la entrada de datos por teclado y permitir solo al lector de codigo de barras.
Muchas Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 29/01/2019 20:54:38
Hola,

Por lo general, el teclado y el lector de código de barras estan en paralelo. Esto le permite escribir el código cuando las barras son ilegibles.

El siguiente código ignorará todos los caracteres escritos en el teclado, pero no sé el efecto en los caracteres que vienen del código de barras (no tengo un lector para probar ...) :

1
2
3
Private Sub UnaTextBox_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles UnaTextBox.KeyUp
        UnaTextBox.Clear()
End Sub

Espero que esto te ayudará ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 29/01/2019 21:27:55
Muchas Gracias por la respuesta.
Efectivamente desactiva el teclado pero también el lector de códigos de barra.
El objetivo es que no pueda digitar vía teclado pero que si vía lector de código de barra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 29/01/2019 21:58:15
Lo siento, esa fue una mala idea ...
Creo que el teclado y el lector usan el mismo puerto, no será fácil de resolver.
Tal vez intente una combinación de 2 eventos: KeyPress y KeyUp. Tengo difícil concebir que el lector los produzca a ambos.

Buena suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Javier
Val: 150
Ha disminuido 1 puesto en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Javier (77 intervenciones) el 30/01/2019 01:18:57
Podrías utilizar las librerías de windows user32.dll para el bloqueo, pero creo que la idea que tienes no te funcionaria tal cual ya que, según tengo entendido, el escaner utiliza la misma interfaz del teclado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 30/01/2019 02:30:02
Muchas Gracias!
Tal y como comentas, vi esa solución en la web pero es bastante radical y no me permite leer del lector de código de barras,
Igual seguimos buscando...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Diego
Val: 605
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Diego (190 intervenciones) el 30/01/2019 02:34:30
Hola Rafa, tengo entendido que los lectores de código de barras introducen al comienzo y al final de la secuencia caracteres no imprimibles. Dependiendo de la marca y modelo de tu lector, ya sea mediante el fabricante o alguna especie de manual que traiga tu producto, podrías habilitar o inhabilitar la escritura con uno o mas condicionales anidados teniendo en cuenta estos "supuestos" caracteres no imprimibles.
Desde ya, está mas que bien hacer uso del evento KeyUp de tu textbox. Es ahí donde realizarías las validaciones. Como te mostraron en mensajes anteriores.

Te tiro esta idea, para que investigues.
Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 30/01/2019 02:41:45
Muchas Gracias Diego, voy a investigar pues lo cierto es que no sé como identificar esos caracteres.. igual investigo y les dejo saber.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 30/01/2019 15:19:16
Hola,

Si el lector de código de barras emite caracteres de control, debe ser posible detectarlos con KeyDown.
Encontré el siguiente extracto de la lección:

"El evento KeyPress ocurre solo cuando se presiona un carácter del teclado, pero no cuando se presiona una tecla de control o una tecla de función. Para responder a la acción de una de estas teclas, use el evento KeyDown. Escribir un carácter provoca el evento KeyPress que es seguido inmediatamente por el evento KeyDown. Cuando se presiona una tecla de control o función, solo se genera el evento KeyDown. El reconocimiento de claves se logra comparando el valor de e.KeyCode con uno de los valores de una larga lista de claves posibles."

1
2
3
Private Sub UnaTextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles UnaTextBox.KeyDown
        If e.KeyCode = ............
End Sub

Buena tarde,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 30/01/2019 17:00:31
Hola,
El problema es que esos caracteres no son impresos, quiero decir visibles, al menos usando el evento KeyDown.
Muchas Gracias por su colaboración!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 30/01/2019 17:36:27
Así es, pero con Keydown es posible leer y mostrar e.KeyCode.ToString o convertir e.Keycode a un valor Integer :

1
2
3
4
Private Sub UnaTextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles UnaTextBox.KeyDown
        MessageBox.Show(e.KeyCode.ToString)
        MessageBox.Show(CType(e.KeyCode, Integer))
End Sub

De hecho, no creo en los caracteres especiales del lector, cuando el texto llega al TextBox, se eliminan los caracteres especiales ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 01/02/2019 21:39:41
Todavía no he podido resolver el problema.
Igual he buscado y lo mas cercano es medir el tiempo entre pulsaciones, por ejemplo, digitar mas de 4 teclas en menos de un segundo es muy difícil para el humano, eso me diría que es el lector.

Si desean reproducir el comportamiento de un lector pueden copiar y después pegar en el textbox, claro eso genera otra interrogante y es que se podría cortar y pegar sobre el textbox...pero la verdad que eso en mi caso no es lo que deseo controlar.

A todos Muchas Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 01/02/2019 22:34:33
Hola,

"...medir el tiempo entre pulsaciones..." : Puede ser la idea correcta.

Intenté con el siguiente código, en KeyDown, en KeyPress y en KeyUp.
Para Copiar-Pegar, solo es posible mediante el menú contextual con KeyDown porque se lee <CTRL>.
Con KeyPress y KeyUp, no es satifaisant.

TextChanged puede ser un mejor evento para medir el tiempo, pero no para Copiar-Pegar.

Por lo tanto, es necesario hacer esta prueba con el lector y buscar cuál es el evento que permite la medición ...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub UnaTextBox_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles UnaTextBox.TextChanged
        Static Cronometria = False
        Dim Tiempo1 As Integer
        Dim Tiempo2 As Integer
        Dim TiempoResult As Integer
        If Cronometria Then
            Tiempo2 = Now.Millisecond
            TiempoResult = Tiempo2 - Tiempo1
            ' Cronometria = False           ''' Attencion : saber cuando reiniciar y calcular un nuevo valor para T1
            MessageBox.Show(TiempoResult)   ''' Exploitar el tiempo medido
        Else
            Tiempo1 = Now.Millisecond
            Cronometria = True
        End If
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 16
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por rafa (7 intervenciones) el 06/02/2019 18:26:42
Tomando en cuentas los aportes brindados y ver otras opciones en la web, la solución que les muestro a continuación satisface mis requerimientos, igual creo que se puede mejorar, por lo que toda sugerencia es bienvenida.
Vale aclarar que los tiempos dependen del lector usado.
Tengan en cuenta que ahora el copiar y pegar sobre el textbox también es detectado como teclado
A todos muchas Gracias por la colaboración!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Public Class Form2
    Dim sw As New Stopwatch
 
    Private Sub TextEdit1_GotFocus(sender As Object, e As EventArgs) Handles TextEdit1.GotFocus
        TextEdit1.SelectAll
    End Sub
 
    Private Sub TextEdit1_KeyDown(sender As Object, e As KeyEventArgs) Handles TextEdit1.KeyDown
        sw.Start
        Label1.Text = sw.ElapsedMilliseconds.ToString
    End Sub
 
    Private Sub TextEdit1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextEdit1.KeyUp
 
        Label2.Text = sw.ElapsedMilliseconds.ToString
        sw.Stop
        sw.Reset
        Label3.Text = (CType(Label1.Text , Integer) + CType(Label2.Text , Integer)).ToString
        If CType(Label3.Text,Integer ) > 0  And (CType(Label3.Text,Integer ) <= 10) Then
            Label4.Text = "Lector"
        Else
            Label4.Text = "Teclado"
            TextEdit1.Focus
        End If
    End Sub
 
    Private Sub TextEdit1_Leave(sender As Object, e As EventArgs) Handles TextEdit1.Leave
        If Label4.Text = "Teclado" Or String.IsNullOrEmpty(TextEdit1.Text) Then
            TextEdit1.Focus
        End If
    End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Desactivar lectura por teclado

Publicado por Phil Rob (1554 intervenciones) el 06/02/2019 19:22:13
Bravo !
Y gracias por la vuelta de la información.

Buena continuación ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar