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

#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.

Respuesta Responder a este mensaje
#2 Alberto
20/10/2008 - 21:46 | Informe spam
Eso no me vale. Quiero cambiar el color del control con el foco y, además,
solo quiero gestionar un grupo de controles.

El problema es el pitido, no cómo hacer lo de las fechas.

"xcal" escribió en el mensaje de noticias
news:
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.





Respuesta Responder a este mensaje
#3 Francisco Rodríguez
21/10/2008 - 09:52 | Informe spam
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.

Respuesta Responder a este mensaje
#4 Alberto
21/10/2008 - 12:39 | Informe spam
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.




Respuesta Responder a este mensaje
#5 Boolean
21/10/2008 - 13:42 | Informe spam
Yo utilizo el siguiente codigo en un evento KeyPress, y nunca tuve
problemas con un pitido

if (e.KeyChar == (int)Keys.Enter)
this.SelectNextControl(this.ActiveControl, true,
true, true, false);



On 21 oct, 08:39, "Alberto" wrote:
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
noticiasnews:

> 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.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida