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