2009-11-25 3 views
10

Existe-t-il un moyen de démarrer une méthode en C# si une touche est enfoncée? Par exemple, Esc?Appuyez sur la touche Echap pour appeler la méthode

+3

en utilisant quoi? Console? Forme? ASP.NET? – Gregoire

+0

J'utilise les formulaires – raimis

+0

Notez que si votre formulaire a un ['CancelButton'] configuré (http://msdn.microsoft.com/library/system.windows.forms.form.cancelbutton.aspx), appuyez sur ** ESC ** va automatiquement cliquer sur ce bouton. Selon vos besoins, cela peut être une bonne approche. –

Répondre

3

J'écris l'application WinForms. L'utilisateur remplit la zone de texte et s'il veut supprimer tout, il clique simplement esc clé sur le clavier

Je pense que vous devez gérer the KeyDown event.

+2

Vous devez également définir la propriété de formulaire 'KeyPreview' sur ** True ** afin de capturer les événements KeyPress – whiteshooz

1

Est-ce que vous écrivez une application Console, une application WinForms ou autre chose? Essayez-vous de capturer la touche ESC à tout moment (quelle que soit la fenêtre ou l'application ciblée) ou autre chose?

Plus de contexte requis.

Si vous écrivez une application de la console, alors vous devriez commencer à regarder les choses comme Console.ReadKey ...

http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx

+0

J'écris l'application WinForms. Utilisateur remplit la zone de texte et s'il veut tout supprimer, il clique simplement sur la touche Echap sur le clavier – raimis

19

utiliser l'événement OnKeyPress de votre zone de texte et en cas

if(e.KeyCode==Keys.Escape) 
{ 
    yourTextBox.Text = string.Empty; 
} 
+5

drôle, cela ne semble pas fonctionner du tout, et il a cinq voix up? 'private void Form1_KeyDown (expéditeur d'objet, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) {...' Cela fonctionne. Mais e.KeyChar est un type de caractère, Keys.Escape ne l'est pas et l'opérateur == ne peut pas être appliqué. –

+0

@MasterPeter en effet, c'était KeyCode ... – Gregoire

+5

pour travailler ce code besoin de Form.KeyPreview = true; –

11

Comme d'autres l'ont mentionné, gérer l'événement KeyDown ou KeyUp du contrôle approprié. L'événement KeyPress travaillerait pour la clé évasion aussi bien, mais il ne se déclenche pas pour certaines touches, comme Maj, Ctrl ou ALt.

Si vous souhaitez exécuter cette fonction à chaque fois que l'utilisateur appuie sur la touche Escape, vous souhaitez probablement gérer l'événement sur le formulaire. Si vous faites cela, vous devrez probablement également définir la propriété KeyPreview du formulaire sur true. Cela permettra au contrôle Form de recevoir l'événement même si le focus est actuellement dans l'un des contrôles enfants.

Si vous voulez que le comportement est spécifique à un contrôle, comme compensation le texte dans une zone de texte qui a actuellement le focus, vous devez gérer l'événement KeyDown ou KeyUp du contrôle TextBox. De cette façon, votre gestionnaire d'événements ne sera pas déclenché si l'utilisateur appuie sur la touche d'échappement en dehors de la zone de texte.

Dans certaines situations, vous pouvez empêcher les contrôles enfants de gérer le même événement que celui que vous venez de gérer. Vous pouvez utiliser la propriété SuppressKeyPress sur la KeyEventArgs classe pour contrôler ce comportement:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Escape) 
    { 
     MessageBox.Show("Escape key pressed"); 

     // prevent child controls from handling this event as well 
     e.SuppressKeyPress = true; 
    } 
} 
+1

Merci pour l'indication utile de KeyPreview! – Peopleware

2

Vous devez passer la propriété sous forme « KeyPreview » true ou vos événements ne se déclenche pas. Gérer ces événements seul ne fera rien même si les événements sont corrects. Il vous semblera que rien ne se passe réellement même si vous avez souscrit les gestionnaires d'événements appropriés.

0

Avec Event KeyPress ...

//Escape 
    if (e.KeyChar == '') 
    { 
      this.DialogResult = DialogResult.Cancel; 
      e.Handled = true; 
    } 
+5

'(char) Keys.Escape' est identique à' '\ x1B'' est identique à '(char) 27' mais ** n'est pas la même chose que **' '' ' – xmojmr

0

Vous pouvez également utiliser l'événement KeyUp. Je le préfère cependant.

private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) { 
    if (e.Key == Key.Escape) { 
     //WHAT WILL HAPPEN INSERT HERE 
    } 
} 
1

d'abord dans les propriétés font> KeyPreview: True

Puis:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Escape) 
     { 
      //call your method here 
     } 
    } 
2

En cas où quelqu'un recherchait comment le faire dans une application console

if (Console.ReadKey().Key == ConsoleKey.Escape) 
{ 
    return; 
} 
Questions connexes