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.
 

Leer las respuestas

#1 xcal
20/10/2008 - 21:21 | Informe spam
y solo con TAB y creo, CTRL+TAB no funciona retroceder y avanzar?
si quieres cuando se dispare el evento de la tecla hacia arriba, mandas
teclear la tecla TAB o CTRL+TAB segun corresponda.

Creo que lo que te permite es una propiedad como AcceptTAB = true
espero ayude, Carlos.

"Alberto" wrote in message
news:
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 similares