2010-12-07 17 views
11

Ich habe ein WinForms-Formular (C# /. Net) und es enthält eine PictureBox, MenuStrip, Panel und zwei Button-Steuerelemente.Detect Arrow Key - KeyDown für das ganze Fenster

Ich muss KeyDown-Ereignis für die Pfeiltasten für das gesamte Fenster erkennen; Wenn sich das Fenster im Vordergrund befindet, muss ich unabhängig davon, welche der untergeordneten Steuerelemente den Fokus hat, wissen, wann eine Pfeiltaste gedrückt wird, und Code ausführen, wenn es passiert.

Ich möchte nicht gehen und einen Ereignishandler für jedes Steuerelement anfügen. Gibt es einen besseren Weg? Wie kann ich es tun?

Bearbeiten: Mit KeyPreview wie von einer Antwort unten vorgeschlagen, bin ich in der Lage, andere Schlüssel zu erkennen. Nicht in der Lage, Pfeiltasten zu erkennen. Ich kann nur dann Pfeiltasten erkennen, wenn die Schaltflächen in meinem Formular deaktiviert sind. Oder sie nehmen den Fokus hin und her und feuern das Ereignis nicht ab. Wie kann ich Pfeiltasten mit Schaltflächen im Formular erkennen?

Antwort

16

Setzen Sie die ProcessCmdKey() - Methode außer Kraft, um die Pfeiltasten zu erkennen.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (keyData == Keys.Left) { 
      Console.WriteLine("left"); 
      return true; 
     } 
     // etc.. 
     return base.ProcessCmdKey(ref msg, keyData); 
    }