Récupérer la touche du clavier appuyée en C# 3.5

Après une assez longue pause dû à la fin d’année de la Licence et du stage, je recommence à avoir du temps pour m’occuper du blog. Désolé encore de l’absence.

Et je vais reprendre assez bien qui plus est. Comme je vois de plus en plus de personnes se penchant sur des fonctionnalités qui requiert la détection de la frappe d’une touche sur un clavier pour affecter un bind par exemple, je vous propose la manière de le faire en C# (je peux le montrer en Java si vous le demandez mais c’est plus simple). De plus il y a peu de tutoriel sur ce sujet, donc je pense qu’il ne sera pas trop redondant avec ce qu’il se fait déjà.

Donc pour détecter la touche qui est frappé sur le clavier et le mettre dans un textbox, voici le code à utiliser (ce code inclut les touches spéciales comme Ctrl, Alt, Enter, etc…) :

//Supposer que c'est le constructeur de la Windows Form
public MainFrame()
{
InitializeComponent();

//Pour faire en sorte que la touche soit affiché après tous les traitements (test ou autre)
this.KeyPreview = true;

clavier.MaxLength = 1;

//On rajoute le handler pour tester les touches
clavier.KeyDown += new KeyEventHandler(clavier_KeyDown);
}
private void clavier_KeyDown(object sender, KeyEventArgs e)
{
clavier.Clear();

//Test des touches "spéciales" et affectation de son nom dans la textbox
switch (e.KeyCode)
{
case Keys.F1:
clavier.Text = "F1";
break;
case Keys.F2:
clavier.Text = "F2";
break;
case Keys.F3:
clavier.Text = "F3";
break;
case Keys.F4:
clavier.Text = "F4";
break;
case Keys.F5:
clavier.Text = "F5";
break;
case Keys.F6:
clavier.Text = "F6";
break;
case Keys.F7:
clavier.Text = "F7";
break;
case Keys.F8:
clavier.Text = "F8";
break;
case Keys.F9:
clavier.Text = "F9";
break;
case Keys.F10:
clavier.Text = "F10";
break;
case Keys.F11:
clavier.Text = "F11";
break;
case Keys.F12:
clavier.Text = "F12";
break;
case Keys.ControlKey:
clavier.Text = "Control";
break;
case Keys.Alt:
clavier.Text = "Alt";
break;
case Keys.Back:
clavier.Text = "Backspace";
break;
case Keys.Enter:
clavier.Text = "Enter";
break;
case Keys.ShiftKey:
clavier.Text = "Shift";
break;
case Keys.Space:
clavier.Text = "Space";
break;
default:
break;
}
e.Handled = false;
}

Bien sûr dans le cadre d’un binder, il faudra limiter le taille de la textbox à un caractère, cela n’empêchera d’affecter un texte plus grand depuis le code.

Voilà, vous savez désormais détecter et afficher une touche qui a été appuyé sur le clavier !

Partager ce billet :
  • Print
  • Add to favorites
  • PDF
  • Twitter
  • Facebook
  • Google Buzz
  • Google Bookmarks
  • Netvibes
  • Digg
  • StumbleUpon
  • del.icio.us
  • FriendFeed
  • Identi.ca
  • LinkedIn
  • Live
  • Orkut
  • Suggest to Techmeme via Twitter

10 comments to Récupérer la touche du clavier appuyée en C# 3.5

  • T’es bien gentil dans ton code mais tu ne dis pas ce que clavier est ???

    Moi je cherche a pouvoir capter F5 à partir d’une Winform


  • « clavier » est le nom de la zone de texte qui affiche la touche qui est appuyée.
    Pourtant en lisant le code je trouve que cela se remarque assez facilement (même si cela n’est pas explicitement marqué, clavier.Text est une fonction utilisé que lorsque la variable est un textArea).

  • oui mais justement moi je veux pouvoir non pas recupérer une touche à partir d’une texbox,textaera,ou encore checkbox !!

    Je veux pouvoir faire ça à partir de la Form directement….


  • J’ai du mal à comprendre ta question là.

    Le script au-dessus permet la chose suivante :
    Tu clic sur la textbox pour qu’elle est le focus (car sinon ça marchera pas), ensuite tu appuie sur une touche du clavier, le script test si cette touche est spéciale (Espace, Alt, Ctrl, F1, etc…) en vérifiant le code clavier et ensuite renvoi dans le textbox (qui est un élément du formulaire) le nom de la touche (au passage on modifie le texte renvoie si il a intercepté un keycode spécial pour donner un affichage clair à l’utilisateur).

    Il faudrai que tu explique un peu mieux ce que tu cherches.

  • Je voudrais quand j’appuie sur F5 que sa me declenche une action directement , sans avoir a donner un focus à un Control de ma Form().. C’est mieu comme ça ?


  • En même temps c’est pas le sujet de ce billet à la base. Si tu souhaite lancer une fonction avec une touche du clavier, tu peux faire un test directement dans la MainFrame et lancer la fonction si la touche est appuyée.

    A la place de clavier il suffit de mettre le nom de la fenêtre normalement, cela devrai fonctionner. (et la deuxième partie du code ne t’es pas utilise).

    Par contre tu vas devoir chercher la liste des KeyCodes en C#.

  • Avec le nom de la fenetre cela ne me fonctionne pas :( …..
    J’ai pas acces au KeyPress ou KeyDown !!! :(

    Poua chui triste la lol


  • Dans ce cas tu vas devoir trouver un autre moyen (mais c’est certainement possible).

  • Ok je vais chercher ;) … C’est quand meme bizarre , si je creais un panel qui contient toute ma form ..Comme ça celui ci aurait tout le temps le Focus ..

    C’est un peu cochon quand meme j’avoue lol … Pouaaa je verrai ….

    En tout cas merci quand meme

  • If only I had a quarter for every time I came to blog.anthodev.com.. Great writing.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>