2009-03-10 6 views

Répondre

2

Bien qu'il n'y ait aucun moyen évident de fournir des raccourcis clavier pour les commandes qui ne sont pas dans les menus, il n'est pas très difficile d'ajouter ces touches. Il y a cinq étapes de base:

Définir une énumération d'accélérateur.

private enum Accelerators { Unspecified = 0, Home, Save, Print, Logout }; 

Créer une table de hachage pour contenir les valeurs énumérées.

Hashtable _accelHash() = new Hashtable(); 

Créer une classe pour représenter les touches d'accélérateur.

Chargez la table avec l'énumération Keys.

_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.H), 
            Accelerators.Home); 
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.S), 
            Accelerators.Save); 
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.P), 
            Accelerators.Print); 
_accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.X), 
            Accelerators.Logout); 

Enfin, substituez ProcessCmdKey et utiliser une instruction switch à être envoyé à la bonne méthode.

protected override bool ProcessCmdKey(ref Message msg, 
             Keys keyData) 
{ 
    ... 
} 

Sinon, pour une approche un peu plus sophistiqué, vous pourriez avoir la carte Hashtable aux délégués qui étaient les méthodes que vous vouliez invoquer, tant qu'ils avaient tous la même signature.

Here's a short article qui décrit les étapes ci-dessus plus en détail.

0

Une manière courante de mettre en œuvre des touches de raccourci est de les détecter dans un événement clavier tel que KeyDown ou KeyUp.

Exemple

public void Form1_KeyUp(object sender,KeyEventArgs e) 
{ 
if (e.Control && e.KeyData==Keys.A) 
{ 
//handle ctrl+a 
} 
Questions connexes