Intercepter les touches du clavier [Résolu]

iow4 303 Messages postés samedi 22 octobre 2005Date d'inscription 2 novembre 2008 Dernière intervention - 26 avril 2006 à 12:06 - Dernière réponse : har_g 4 Messages postés mercredi 18 juillet 2007Date d'inscription 14 juin 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 28 avril 2006 à 01:59
1
Merci
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( ) );
    }
}

Merci Lutinore 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 76 internautes ce mois-ci

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

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

...
Commenter la réponse de har_g

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.