Intercepter les touches du clavier

Résolu
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 - 26 avril 2006 à 12:06
har_g Messages postés 4 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 14 juin 2008 - 14 juin 2008 à 15:50
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
28 avril 2006 à 01:59
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( ) );
    }
}
1
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 avril 2006 à 19:07
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;
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
26 avril 2006 à 19:19
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 avril 2006 à 20:25
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
26 avril 2006 à 20:43
la solution marche mais pas pour les touches flechées
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
27 avril 2006 à 00:14
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.
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
27 avril 2006 à 11:46
Même avec keydown sa marche pas lorsque j'appuie sur les touches flechées sa passe le focus aux boutons
0
iow4 Messages postés 302 Date d'inscription samedi 22 octobre 2005 Statut Membre Dernière intervention 2 novembre 2008 4
28 avril 2006 à 11:34
Merci beaucoup sa marche
0
har_g Messages postés 4 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 14 juin 2008
14 juin 2008 à 15:48
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 ???

...
0
har_g Messages postés 4 Date d'inscription mercredi 18 juillet 2007 Statut Membre Dernière intervention 14 juin 2008
14 juin 2008 à 15:50
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)

...
0
Rejoignez-nous