Pitido molesto

20/10/2008 - 18:41 por Alberto | Informe spam
Me encuentro con que en casi todas las aplicaciones que hago tengo que
escribir código para el usuario pueda pasar de una caja de texto (o
cualquier otro control) al siguiente pulsando enter o flecha abajo. Si
pulsan flecha arriba, se daría el foco al control anterior. Además, cambio
el color de fondo del control que tiene el foco.

Cansado de esta situación, hice una clase descendiente de List<Control> que
hace las tareas anteriores. De este modo la puedo reutilizar entre
aplicación y aplicación. Lo único que tengo que hacer es agregar los
controles que me interesa gestionar a dicha lista. Por ejemplo, en una
aplicación donde quiera gestionar todas las cajas de texto, haría lo
siguiente:

ControlEdición controles = new ControlEdición();
foreach (Control control in this.Controls)
if (control is TextBox)
controles.Add(control);

El único problema con el que me encuentro es que al pulsar enter, a
diferencia de lo que ocurre cuando pulso flecha abajo o tabulo, se oye un
pitido.

En el código lo único que hago es llamar al método Focus() del control
siguiente según el orden de tabulación. La sección de código donde se
comprueba la pulsación de Enter (donde pita)
es la siguiente:
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)
{
if (((Control)sender).TabIndex == this.Count - 1)
this[0].Focus();
else
this[((Control)sender).TabIndex + 1].Focus();
e.Handled = true;
}

¿Se os ocurre cuál puede ser el motivo del pitido? Gracias.

Preguntas similare

Leer las respuestas

#6 Francisco Rodríguez
21/10/2008 - 16:36 | Informe spam
Hola Alberto.

Yo tampoco entiendo muy bien este comportamiento, pero parece ser que es un
comportamiento estándar de Windows, que tiene que ver con los TextBox que no
son multilínea, según dice Toni Recio en este mensaje:

http://forums.microsoft.com/MSDN-ES...amp;SiteID

Me extraña un poco que este tipo de cosas no sean "configurables" en el
propio sistema operativo. Tal vez se pueda corregir sin necesidad de
programación, pero ignoro si será posible.


Un saludo.

Francisco Rodríguez



"Alberto" escribió en el mensaje de
noticias:
El código donde controlaba la pulsación del Enter era en el manejador del
evento KeyDown porque tenía que comprobar las teclas de las fechas.

La solución la encontré añadiendo el e.Handled = true en el manejador de
evento Key_Press:
private void txtEmail_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)13)
e.Handled = true;
}
Gracias a Francisco Rodríguez. El link que nos pasaste me dio la idea.
Gracias!!

Ahora ya no pita pero tengo un problema...sigo sin entender lo que
realmente pasa. :-)))
¿Porqué pita al pulsar enter? Para mi es un misterio.

"Francisco Rodríguez" escribió en el mensaje de
noticias news:
Hola Alberto.

Creo que en este enlace hablan algo sobre ese "beep" molesto:

http://www.syncfusion.com/FAQ/Windo..._c94c.aspx


Un saludo.

Francisco Rodríguez.



"Alberto" escribió en el mensaje de
noticias:
Me encuentro con que en casi todas las aplicaciones que hago tengo que
escribir código para el usuario pueda pasar de una caja de texto (o
cualquier otro control) al siguiente pulsando enter o flecha abajo. Si
pulsan flecha arriba, se daría el foco al control anterior. Además,
cambio
el color de fondo del control que tiene el foco.

Cansado de esta situación, hice una clase descendiente de List<Control>
que
hace las tareas anteriores. De este modo la puedo reutilizar entre
aplicación y aplicación. Lo único que tengo que hacer es agregar los
controles que me interesa gestionar a dicha lista. Por ejemplo, en una
aplicación donde quiera gestionar todas las cajas de texto, haría lo
siguiente:

ControlEdición controles = new ControlEdición();
foreach (Control control in this.Controls)
if (control is TextBox)
controles.Add(control);

El único problema con el que me encuentro es que al pulsar enter, a
diferencia de lo que ocurre cuando pulso flecha abajo o tabulo, se oye
un
pitido.

En el código lo único que hago es llamar al método Focus() del control
siguiente según el orden de tabulación. La sección de código donde se
comprueba la pulsación de Enter (donde pita)
es la siguiente:
if (e.KeyCode == Keys.Down || e.KeyCode == Keys.Enter)
{
if (((Control)sender).TabIndex == this.Count - 1)
this[0].Focus();
else
this[((Control)sender).TabIndex + 1].Focus();
e.Handled = true;
}

¿Se os ocurre cuál puede ser el motivo del pitido? Gracias.








email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida