2009-07-17 8 views

Répondre

15
bool ctrl = ((Control.ModifierKeys & Keys.Control) == Keys.Control); 
5

Si vous voulez détecter dans un gestionnaire de presse clés, vous regardez les propriétés de modification:

private void button1_KeyPress(object sender, 
           System.Windows.Forms.KeyPressEventArgs e) 
{ 
    if ((Control.ModifierKeys & Keys.Control) == Keys.Control) 
    { 
    MessageBox.Show("Pressed " + Keys.Control); 
    } 
} 

En fait, en regardant cela et le voir ne pas utiliser l'argument e, il semble aussi longtemps que votre "ceci" est dérivé d'un formulaire ou d'un contrôle, alors vous pouvez faire cet appel à tout moment et pas seulement dans un gestionnaire d'événements clavier.

Cependant, si vous vouliez assurer une combinaison, comme Ctrl - A a été pressé, vous auriez besoin d'une logique supplémentaire.

private void myKeyPress(object sender, 
         System.Windows.Forms.KeyPressEventArgs e) 
{ 
    if (((Control.ModifierKeys & Keys.Control) == Keys.Control) 
     && e.KeyChar == 'A') 
    { 
    SelectAll(); 
    } 
} 
1

Ajout d'une réponse tardive à une vieille question ...

Les autres réponses lire l'état actuel de la clé de contrôle. Si vous voulez lire directement le drapeau de contrôle des args d'événements passés (à savoir qu'il était au moment où l'événement a eu lieu), utilisez les KeyUp ou KeyDown événements (non KeyPress):

private void HandleTextKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Control && e.KeyCode == Keys.A) 
    { 
     ((TextBox)sender).SelectAll(); 
     e.Handled = true; 
    } 
}