2010-10-20 5 views
0

J'ai une application Windows Forms, avec un formulaire qui contient 2 tabcontrols et une grille. Je voudrais attraper le pressage de la touche Echap sur n'importe laquelle de ces commandes. La question est: est-ce une façon plus simple de faire cela sans s'abonner à l'événement de pression sur chaque contrôle?Touche appuyée sur le formulaire

Merci!

Répondre

2

Vous pouvez simplement faire ce qui suit. Implémente un événement IMessageFilter et Handle Key Down. Voici le code complet pour accrocher Escape Key Down.

public class MyKeboardHook:IMessageFilter 
    { 
     public const int WM_KEYDOWN = 0x0100; 
     public const int VK_ESCAPE = 0x1B; 
     public event EventHandler EscapeKeyDown; 
     public bool PreFilterMessage(ref Message m) 
     { 
      if (m.Msg == WM_KEYDOWN && m.WParam == new IntPtr(VK_ESCAPE)) 
      { 
       OnEscapeKeyPressed(); 
      } 
      return false; //Do not Process anything 
     } 
     protected virtual void OnEscapeKeyDown() 
     { 
      if(this.EscapeKeyDown!=null) 
      { 
       EscapeKeyDown(this, EventArgs.Empty); 
      } 
     } 
    } 

Maintenant vous devez vous inscrire. Le meilleur endroit serait dans le principal

static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      MyKeboardHook myKeboardHook = new MyKeboardHook(); 
      myKeboardHook.EscapeKeyDown += (e, x) => 
                { 
                 MessageBox.Show("Escape Key Pressed"); 
                }; 
      Application.AddMessageFilter(myKeboardHook); 


      Application.Run(new Form1()); 

     } 
    } 
0

Abonnez-vous à l'événement sur le formulaire lui-même.

Si le contrôle ne gère pas l'événement, il devrait atteindre le formulaire où il sera géré.

+0

C'était la première chose que j'ai essayée, mais apparemment il ne bulle pas. – maephisto

+0

@maephisto - avez-vous activé PreviewKeyEvents (je pense que ça s'appelle) sur? – ChrisF

Questions connexes