2009-12-26 3 views
7

Je crée une application Windows (WinForms) et je souhaite que mon application appelle une méthode lorsque l'utilisateur appuie sur F5 - cela devrait fonctionner quel que soit l'utilisateur, mais il doit utiliser le programme - Je ne veux pas utiliser des hameçons globaux - des idées?Ajout d'une touche de raccourci F5 en C#

Répondre

3

Si vous ne disposez que d'un seul formulaire pouvant avoir le focus, vous pouvez définir la propriété KeyPreview de ce formulaire sur true et gérer l'événement KeyPress.

La propriété KeyPreview entraîne la réception par le formulaire de toutes les touches, quel que soit le contrôle sur le formulaire ayant le focus d'entrée.

+0

+1 de remarquer que cela ne fera que travailler pour chaque formulaire que vous définissez cette propriété et non l'application globale –

4

la propriété Vérifiez Form.KeyPreview, il vous permettra de piéger tous les KeyDown, KeyUp et KeyPress événements au niveau de forme avant de leur permettre d'être traitées par des éléments individuels.

MSDN Form.KeyPreview page

+0

Cela ne de travaux dans le cas des applications triviales qui sont une forme unique et l'une des formes les enfants ont toujours le focus. c'est plutôt un hack qui fonctionne la plupart du temps qu'une solution. –

14

Override ProcessCmdKey de la forme sur votre formulaire principal et chercher F5.

protected override bool ProcessCmdKey (ref Message msg, Keys keyData) 
{ 
    bool bHandled = false; 
    // switch case is the easy way, a hash or map would be better, 
    // but more work to get set up. 
    switch (keyData) 
    { 
     case Keys.F5: 
      // do whatever 
      bHandled = true; 
      break; 
    } 
    return bHandled; 
} 
+2

Vous pouvez ajouter un cas ** par défaut ** dans le commutateur de sorte que la classe de base regarde la clé au lieu de simplement retourner false: 'default: return base.ProcessCmdKey (ref msg, keyData) " –

Questions connexes