mvc - lector de codigo qr c#
problema con el valor de lectura del escáner de código de barras en el cuadro de texto (4)
Tengo un escáner de código de barras que lee la cadena del código de barras y se muestra en el cuadro de texto activo. El problema que estoy teniendo es que necesito ese código de barras para ser utilizado tan pronto como se escanea (ningún usuario "ok").
Cuando realizo el evento Text Changed, se dispara tan pronto como se ingresa el primer carácter del código de barras en el cuadro de texto. (es decir, si el código de barras es 123r54122, se dispara con ''1'' en el cuadro de texto).
No hay un carácter final consistente para el código de barras o la longitud estándar. Entonces, ¿cómo voy a disparar un método cuando se ha leído toda la secuencia?
¿El escáner no envía una señal que indique que ha terminado de leer la información? Seguramente sería si no tiene una longitud estándar de carácter final. De todos modos, debe leer el valor en la memoria y luego establecer el texto del cuadro de texto de una vez en lugar de insertar cada carácter como se recibe.
Editar; Si está escribiendo la información en un cuadro de texto como lo recibe, entonces llame al evento de cuadro de texto ... ¿por qué molestarse en escribirlo en el cuadro de texto? Simplemente llame al evento cuando haya determinado que es un código de barras completo directamente
El único escáner de código de barras que he usado (un modelo USB de Lindy) puede agregar una devolución o no dependiendo de cómo esté configurado. El cambio de modo se logra escaneando un código de barra de control especial impreso en un folleto provisto con el escáner.
No estoy familiarizado con C #, pero en Java puedes escuchar un ActionEvent en lugar de un TextEvent para detectar cuando se presiona return en lugar de un carácter que se escribe. Esta sería una alternativa más simple a la sugerencia de Dandan78, si está disponible en C #.
Los escáneres de código de barras con los que he trabajado agregan una nueva línea (return / enter) al final de la cadena del código de barras. Establezca el cuadro de texto para aceptar return (AcceptReturn to true) y luego haga algo como
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
doSomething();
}
Puede verificar la longitud del texto (creo que es constante para los códigos de barras). Por ejemplo, suscríbase al evento TextChange y si text length = barCodeLength, luego suba el evento escaneado.
Si el código de barras tiene longitud variable, puede intentar algo como esto: 1) definir
private Timer _timer;
private DateTime _lastBarCodeCharReadTime;
2) inicializa el temporizador
_timer = new Timer();
_timer.Interval = 1000;
_timer.Tick += new EventHandler(Timer_Tick);
3) agregar controlador
private void Timer_Tick(object sender, EventArgs e)
{
const int timeout = 1500;
if ((DateTime.Now - _lastBarCodeCharReadTime).Milliseconds < timeout)
return;
_timer.Stop();
// raise Changed event with barcode = textBox1.Text
}
4) en el controlador de eventos TextChanged agrega esto
private void textBox1_TextChanged(object sender, EventArgs e)
{
_lastBarCodeCharReadTime = DateTime.Now;
if (!_timer.Enabled)
_timer.Start();
}