Visual CSharp .NET - Foco y en código de barras

   
Vista:

Foco y en código de barras

Publicado por Ephesia (1 intervención) el 20/11/2012 13:10:25
Hola foreros:

En una aplicación utilizo un lector de códigos de barras para introducir datos.
El lector lanza la información a un textBox que tiene el foco y que ejecuta un programa, al capturar el enter enviado por el lector.

Hasta aquí todo correcto.

El problema consiste en que la aplicación tiene muchos cuadros de texto y el
el lector escribe en el que tiene el foco en ese momento, por lo que hay que hacer click
constantemente en el cuadro de texto asignado para el lector para ejecutar el programa.

Si no se establece el foco al textBox predeterminado,
escribe la información en cualquier otro cuadro de texto que tenga el foco.

Lo que intento es que el lector envíe siempre los datos a un campo por defecto, sin que el resto pierdan el foco, y no automáticamente al que en ese momento tiene el foco.

Por ejemplo:
Cuando se detecta la señal del lector poner el foco en el textBox predeterminado
y cuando se termina de leer volver a poner el foco en el cuadro de texto en el que estaba.

¿Alguien se ha encontrado con este problema?
¿ Como detecto el lector antes de que mande los números y el/los enter?

Saludos
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
información
Otras secciones de LWP con contenido de Visual CSharp .NET
- Código fuente de Visual CSharp .NET
- Chat de Visual CSharp .NET
información
Códigos de Visual CSharp .NET
- Modelo Repositorio acceso a datos C#
- Simple Calculadora
- Visualizador FotografiasC

Foco y en código de barras

Publicado por Fer ferchu91@hotmail.com (6 intervenciones) el 26/11/2012 23:24:47
Hola, la solucion esta en sobreescribir el método WndProc del formulario que contiene los cuadros de texto. Por este método pasan absolutamente todos los mensajes de windows que van dirigidos tanto al formulario como a sus controles, y es el sitio ideal para capturarlo antes de que llegue al control equivocado.

El problema de esto, es que deberías saber que mensaje envia el lector, y con que parametros (en Lparam y Wparam) para poder capturarlo... En eso ya no te puedo ayudar por que no tengo un lector para probar, pero si tu lo tienes puedes probar a ver que mensaje envia y asi poder capturarlo.

Espero te sirva de algo, 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

Foco y en código de barras

Publicado por Ephesia (8 intervenciones) el 27/11/2012 19:46:44
Muchas gracias lo probaré y te comento.
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

Foco y en código de barras

Publicado por Ephesia (8 intervenciones) el 27/11/2012 23:51:45
Hola:
No he hecho nunca override del WndPro, por lo que estoy algo perdido.
Según el código más abajo el textbox me devuelve varios números que cambian constantemente, uno en WParam y varios en LParam, que, en mi ignorancia,
creo que no tienen nada que ver con el lector.
Si paso el lector de códigos de barras muestra el número del código leído.

Pero no anula el resto de los textbox que es lo que quiero...

¿Qué hago mal?

//Constantes de posible uso
private const uint WM_PAINT = 0x000F;
private const uint WM_ERASEBKGND = 0x0014;
private const uint WM_KEYDOWN = 0x0100;
private const uint WM_KEYUP = 0x0101;
private const uint WM_MOUSEMOVE = 0x0200;
private const uint WM_LBUTTONDOWN = 0x0201;
private const uint WM_LBUTTONUP = 0x0202;
private const uint WM_NOTIFY = 0x4E;

// Notificaciones de posible uso
private const uint NM_CLICK = 0xFFFFFFFE;
private const uint NM_DBLCLK = 0xFFFFFFFD;
private const uint NM_RCLICK = 0xFFFFFFFB;
private const uint NM_RDBLCLK = 0xFFFFFFFA;

// Teclas de posible uso
private const uint VK_SPACE = 0x20;
private const uint VK_RETURN = 0x0D; // 13 es la usada



public Form1()
{
InitializeComponent();

}

protected override void WndProc(ref Message m)
{
switch (m.Msg)

{

case (int)VK_RETURN: // de uint a int

this.textBox1.Text = m.WParam.ToString();

this.textBox1.Text += "/" + m.LParam.ToString();

break;

}

base.WndProc(ref m);

}
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

Foco y en código de barras

Publicado por Fer ferchu91@hotmail.com (6 intervenciones) el 28/11/2012 10:19:46
Pues ahora si que me has matado, por que por lo que pones ahi te esta pasando en WParam y LParam el código de barras que ha leido, pero según tengo entendido yo en LParam debería pasarte el handle del control de destino, que es la forma que tienes de controlar el código de destino, pero en tu caso no se como lo esta haciendo, asi que no te puedo ayudar mas, lo siento...
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

Foco y en código de barras

Publicado por ephesia (8 intervenciones) el 30/11/2012 01:49:48
Hola:
El problema es que no entra en el swich, ni con keydow, keyup, etc. entoces fuera devuelve el código de barras que lee el lector y lo escribe en el cuadro de texto. Con enter si que entra, pero el lector manda primero los números y al final el (los) enter, con lo que sólo captura espacio, no sirve. Además sólo lo captura la primera vez, el resto, borra el contenido de cuadro de texto, si lo hubiese, manda los números leídos y vuelve a poner los nuevos y de ahí no salgo...

Tampoco puedo comprobar que manda m.Msg porque si pongo un stop u un message antes o al final del swich entra en un bucle infinito de llamadas y respuestas...
¿Alguien sabe qué pudiera pasar?
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