2017-02-02 2 views
0

in meinem Projekt muss ich diesen vorgefertigten Code geändert, um das Layout des Spiels zu ändern. Daher möchte ich wichtige Ereignisse in meinem Formular für meine Navigation zu "WASD" hinzufügen, anstatt eine Schaltfläche zu verwenden, um die Schlange zu bewegen. Aber das Problem hier ist, dass, sobald ich die Funktion zum Formular hinzufügte und es prüfte, um auf der Konsole heraus anzuzeigen, gibt es nichts, keinen Ereignisfehler. Ich bin kein Experte darin, also hoffe ich, dass jemand so freundlich ist, mich auf den richtigen Weg zu führen, danke.Key Event Problem in Winform C#

Dies ist der Code und Screenshot meines Projekts.

public Form1() 
    { 
     InitializeComponent(); 

     backgroundMusic.PlayLooping(); 


     this.AutoSize = true; 
     boardPanel.AutoSize = true; 

     //Set up the main board 
     mainBoard = new Board(this); 

     //Set up the game timer at the given speed 
     clock = new Timer(); 
     clock.Interval = speed; //Set the clock to tick every 500ms 
     clock.Tick += new EventHandler(refresh); //Call the refresh method at every tick to redraw the board and snake. 

     duration = 0; 
     score = 0; 
     level = 1; 
     modeLBL.Text = mode; 

     gotoNextLevel(level); 

    } 

    private void keyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == Keys.W) 
     { 
      Console.WriteLine("W is pressed"); 
     } 
    } 
} 

Design Ansicht des Formulars. Design view of the form

+0

Sie haben nicht wirklich die Handler registriert ' this.KeyDown = new KeyEventHandler (keyDown); ' –

Antwort

3

Ihr Problem ist, dass in der Regel eine der Control s auf Ihrem Form den Fokus hat und alle wichtigen Ereignisse zu erfassen.

Ihr Damit Form erhöhen, um ein KeyDown Ereignis, wenn eine Taste gedrückt wird, während ein untergeordnetes Steuerelement den Fokus hat, stellen Sie die KeyPreview Eigenschaft Ihres Form auf true:

public Form1() 
{ 
    InitializeComponent(); 

    backgroundMusic.PlayLooping(); 

    this.AutoSize = true; 
    this.KeyPreview = true; // <-- add this line 
+0

Ich glaube, das sollte die richtige Antwort sein. 99,9% der Probleme bei Tastenbetätigungen auf winform kommen zu form.KeyPreview – Stavm

+0

Danke für Ihre schnelle Antwort, zuerst habe ich versucht, nach der 'keyPreview' zu suchen, aber nirgendwo zu finden, jetzt weiß ich, dass ich es eingeben muss der Code selbst statt aus dem Eigenschaftsmenü des Formulars zu suchen. haha .. – Jatiz

+0

@Jatiz aber es ist tatsächlich im Eigenschaftsfenster des Formulars :) "KeyPreview" zwischen "IsMdiContainer" und "Sprache" (wenn alphabetisch sortiert). –