Intercepter les touches du clavier [Résolu]

Signaler
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
4
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
14 juin 2008
-
Bonjour,

J'ai un winform et j'aimerais pouvoir intercepter les touches du clavier. Je me suis donc rendu dans le evenements de cette winform et j'ai ajouté un evenement keydown

Voici le code que j'ai placé dans la fonction :

private

void Form1_KeyDown(
object sender,
KeyEventArgs e){

MessageBox.Show(
Convert.ToString(e.KeyCode));

if (e.KeyCode ==
Keys.Up){

bouge(0, -10);

}

if (e.KeyCode ==
Keys.NumPad4){

bouge(0, -10);

}

 

}

Malheuresement ce code ne marche pas
Pouriez vous me dire pourquoi.
Merci d'avance

10 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Tu as raison, pour les flêches c'est un peu différent, y'a plusieurs solution, comme overrider IsInputKey pour chaque contrôle.. Il me semble que la méthode la plus simple au niveau du formulaire est de redéfinir ProcessCmdKey :

public partial class Form1 : Form
{
    public Form1( )
    {
        InitializeComponent( );


        this.KeyPreview = true;
        //this.button1.TabStop = false;
        //this.button2.TabStop = false;
    }


    protected override bool ProcessCmdKey( ref Message msg, Keys keyData )
    {
        switch ( keyData )
        {
            case Keys.Right : MessageBox.Show( "Right" ); return true;
            case Keys.Left : MessageBox.Show( "Left" ); return true;
            case Keys.Up : MessageBox.Show( "Up" ); return true;
            case Keys.Down : MessageBox.Show( "Down" ); return true;
            default : return base.ProcessCmdKey( ref msg, keyData );
        }
    }


    protected override void OnKeyDown( KeyEventArgs e )
    {
        base.OnKeyDown( e );


        MessageBox.Show( e.KeyCode.ToString( ) );
    }
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Salut, as tu bien inscrit ton délégué :

this.KeyDown +=new KeyEventHandler( Form1_KeyDown );

Ou alors tu as d'autres contrôles sur ta formes qui prennent le focus et dans ce cas rajoute dans le constrcuteur de la forme :

this.KeyPreview = true;
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Voici mon délégué :


this.KeyPress +=
new System.Windows.Forms.
KeyPressEventHandler(
this.Form1_KeyPress);

J'ai ajouté this.KeyPreview = true;  met sa ne marche pas
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
Là tu utilises KeyPress alors que dans ton premier exemple tu essayes de gérer KeyDown, c'est pas les même délégués
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
la solution marche mais pas pour les touches flechées
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
32
L'événement KeyPress marche uniquement pour les touches qui représente un caractère, ce n'est pas le cas des touches fléchées, tu peux seulement les intercepter dans l'évènement KeyDown ou KeyUp.
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Même avec keydown sa marche pas lorsque j'appuie sur les touches flechées sa passe le focus aux boutons
Messages postés
303
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Merci beaucoup sa marche
Messages postés
4
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
14 juin 2008

Bonjour, j'ai utilisé la solution des processcmdkey et ca fonctionne très bien pour l'utilisation des touches fléchées.

Mais lorsque j'enfonce HAUT et ensuite DROITE, l'action accomplie et HAUT et ensuite DROITE et je désirerais obtenir une autre action style HAUT+DROITE (mouvement oblique donc)

as tu une idée ???

...
Messages postés
4
Date d'inscription
mercredi 18 juillet 2007
Statut
Membre
Dernière intervention
14 juin 2008

Pour plus de clarter, je voulais parler d'une combinaison de touches simultanées (et pas suites successive)
(sorry, j'ai pas su éditer mon post)

...