Pourquoi Keys.Direction déplace le Focus ?
Le
Jean-Noël

Bonjour,
J'intercepte les évènements KeyPress, KeyDown avec un
system.windows.form.Control que j'ai ajouté sur une Form. Le
Form.KeyPreviewúlse.
Les touches de direction ne déclenchent pas KeyDown, mais déplacent le focus
sur les autres control de la feuille, comme la touche TAB. Les autres
touches sont pourtant bien détectées : PgUP, PgDN, Insert, etc.
J'aimerai détecter ces touches dans le Keydown.
Quelqu'un sait-il ce qui se passe ?
Voici le code pour test:
'Un nouveau control pour ma feuille
Private WithEvents MyCTRL As New Control
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'J'ajoute un control sur ma feuille
Me.Controls.Add(MyCTRL)
MyCTRL.Location = New Point(50, 50)
MyCTRL.Size = New Size(100, 100)
MyCTRL.BackColor = Color.Azure
MyCTRL.Visible = True
MyCTRL.Focus()
End Sub
Private Sub MyCTRL_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyCTRL.Click
'Je redonne le Focus à mon control, car il
'le perd avec les flèches de direction.
MyCTRL.Focus()
End Sub
Private Sub MyCTRL_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles MyCTRL.KeyDown
Beep()
Label1.Text = "Keydown"
End Sub
Private Sub MyCTRL_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles MyCTRL.KeyPress
Beep()
Label1.Text = "Keypress"
End Sub
Merci.
J'intercepte les évènements KeyPress, KeyDown avec un
system.windows.form.Control que j'ai ajouté sur une Form. Le
Form.KeyPreviewúlse.
Les touches de direction ne déclenchent pas KeyDown, mais déplacent le focus
sur les autres control de la feuille, comme la touche TAB. Les autres
touches sont pourtant bien détectées : PgUP, PgDN, Insert, etc.
J'aimerai détecter ces touches dans le Keydown.
Quelqu'un sait-il ce qui se passe ?
Voici le code pour test:
'Un nouveau control pour ma feuille
Private WithEvents MyCTRL As New Control
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
'J'ajoute un control sur ma feuille
Me.Controls.Add(MyCTRL)
MyCTRL.Location = New Point(50, 50)
MyCTRL.Size = New Size(100, 100)
MyCTRL.BackColor = Color.Azure
MyCTRL.Visible = True
MyCTRL.Focus()
End Sub
Private Sub MyCTRL_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles MyCTRL.Click
'Je redonne le Focus à mon control, car il
'le perd avec les flèches de direction.
MyCTRL.Focus()
End Sub
Private Sub MyCTRL_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles MyCTRL.KeyDown
Beep()
Label1.Text = "Keydown"
End Sub
Private Sub MyCTRL_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles MyCTRL.KeyPress
Beep()
Label1.Text = "Keypress"
End Sub
Merci.
Voilà qui est beaucoup plus clair...
En fait par défaut les touches Down et Up sont interceptées par Control,
mais elle ne déclenche pas les événement KeyDown (tout simplement parceque
par défaut sous Windows la touche Up et Down fait passer le focus à un
autre contrôle).
Si vous souhaitez traiter cette touche comme une saisie normale, traiter
l'événement PreviewKeyDown, et dans la méthode traitant cette événement,
si vous obtenez la touche Up ou Down affectez True à e.IsInputKey = True.
Vous considérez ainsi que les touches Up et Down sont des touches de
"saisies normales" et elles déclencheront l'événement KeyDown, KeyPress et
KeyUp...
Cordialement
--
Gilles TOURREAU
S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Un grand Merci, en tout cas et excellente journée.
"Gilles TOURREAU"