Comportamiento extraño (creo) de la tecla intro

13/06/2005 - 12:58 por LuisMiguel | Informe spam
Buenas
En un formulario en el que tengo definido el Keypreview=true, y en el
KeyPress, utilizo el SelectNextControl
Bueno, todo funciona correctamente, con la tecla intro me desplazo por todos
los campos del formulario sin ningun problema.
Este formulario, dispone de botones que abren otros formularios, y aqui
viene el problema (los formularios los abro mediante un ShowDialog),
esporadicamente, al retornar de alguno de estos formularios, la tecla intro
pierde su funcionamiento, y al pulsarla, realiza el click sobre el ultimo
boton pulsado, no desplazandose por los campos como hacia antes (si utilizo
la tecla TAB el desplazamiento es correcto)

Hay alguna justificación a este funcionamiento?
Como puedo solucionarlo?

Perdon por el rollo, y si no se entiende algo...

Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#1 José Ramón
13/06/2005 - 13:12 | Informe spam
Yo he tenido el mismo problema y despues de investigar
he averiguado lo siguiente:

- Solo ocurre con .NET framework 1.1, con el 1.0 no pasa
(es el que yo uso) y por lo que he podido comprobar con el 2.0(beta)
tampoco.

Lo que no se es si existe alguna solución o si el último service pack lo
soluciona, yo uso 1.0 y saltare al 2.0 cuando este en el mercado,
así que no le he dado más vueltas.


Saludos
Respuesta Responder a este mensaje
#2 LuisMiguel
14/06/2005 - 09:05 | Informe spam
Gracias por la informacion.
Vere si puedo solucionarlo de alguna forma, al retomar el foco el formulario
o algo asi

Suerte
LuisMiguel
"José Ramón" escribió en el mensaje
news:%23uW$

Yo he tenido el mismo problema y despues de investigar
he averiguado lo siguiente:

- Solo ocurre con .NET framework 1.1, con el 1.0 no pasa
(es el que yo uso) y por lo que he podido comprobar con el 2.0(beta)
tampoco.

Lo que no se es si existe alguna solución o si el último service pack lo
soluciona, yo uso 1.0 y saltare al 2.0 cuando este en el mercado,
así que no le he dado más vueltas.


Saludos


Respuesta Responder a este mensaje
#3 Tristan
14/06/2005 - 12:35 | Informe spam
El problema que tienes creo que es sencillo, a no ser que sea distinto a lo
que entiendo por tu mensaje.

Independientemente de que establezcas el KeyPreview del formulario, los
botones se pulsan cuando se teclea Intro con el foco sobre ellos. Puesto que
para abrir el segundo formulario has debido pinchar un botón, este poseerá el
foco al retornar a tu formulario.

La solución es simplemente establecer el foco en un control que no sea un
botón, al volver a tu formulario, o mejor incluso antes de mostrar el segundo.

Por otro lado, tal vez en lugar de utilizar el método SelectNextControl,
utilizaría la clase SendKeys.

Este ejemplo está probado sobre el framework 1.0 y no hace lo que tu dices.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
Me.TextBox1.Focus() ' Foco fuera de Button1
Dim f As New Form2()
f.ShowDialog()
End Sub

Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles
MyBase.KeyPress
If e.KeyChar = vbCr Then
e.Handled = True
SendKeys.SendWait("{Tab}")
End If
End Sub


Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
#4 LuisMiguel
15/06/2005 - 17:05 | Informe spam
Gracias por tu atencion Juan Carlos.
El problema, no es como lo interpretaste, el efecto se produce cambiando el
foco a una caja de texto (mediante el uso del raton) y cuando pulso el
intro, es el raton el que lo recibe.
Parece que si en el click del ratón, añado cuando retorna del formulario el
KeyPreview de nuevo a True, esto no sucede.
Por cierto, utilizo el framework 1.1

Y ya que estamos, es mas conveniente el uso de SendKeys para este caso en
particular o el SelectNextControl

Gracias
LuisMiguel
"Tristan" escribió en el mensaje
news:
El problema que tienes creo que es sencillo, a no ser que sea distinto a
lo
que entiendo por tu mensaje.

Independientemente de que establezcas el KeyPreview del formulario, los
botones se pulsan cuando se teclea Intro con el foco sobre ellos. Puesto
que
para abrir el segundo formulario has debido pinchar un botón, este poseerá
el
foco al retornar a tu formulario.

La solución es simplemente establecer el foco en un control que no sea un
botón, al volver a tu formulario, o mejor incluso antes de mostrar el
segundo.

Por otro lado, tal vez en lugar de utilizar el método SelectNextControl,
utilizaría la clase SendKeys.

Este ejemplo está probado sobre el framework 1.0 y no hace lo que tu
dices.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
Me.TextBox1.Focus() ' Foco fuera de Button1
Dim f As New Form2()
f.ShowDialog()
End Sub

Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs)
Handles
MyBase.KeyPress
If e.KeyChar = vbCr Then
e.Handled = True
SendKeys.SendWait("{Tab}")
End If
End Sub


Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
#5 Tristan
15/06/2005 - 22:22 | Informe spam
El problema, no es como lo interpretaste, el efecto se produce cambiando
el foco a una caja de texto (mediante el uso del raton) y cuando pulso el



Pues no acabo de entenderlo. He probado lo que dices y no me ocurre. ¿Al
volver, deja de responder al evento KeyPress? ¿Has probado si al KeyDown le
ocurre lo mismo?

En cuanto a que es más conveniente, si usar SendKeys o SelectNextControl.
Pues sinceramente no lo sé. No he leido nada sobre ese tema. Sé que existía
una cierta leyenda negra sobre SendKeys en versiones anteriores de VB. No sé
si esta leyenda tiene base o no, o si en .net se mantiene. Sinceramente dudo
mucho que SendKeys tenga ningún problema. No tendría sentido crear una clase
que es parte del framework que tuviese problemas tan conocidos. Lo cierto es
que SendKeys es mucho más intuitivo. Sigo casi siempre la máxima de que el
código fácil de escribir es fácil de leer y por tanto de mantener. Pero es
que además, nunca modifico el comportamiento natural del Intro.

Juan Carlos Badiola
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida