2017-04-01 1 views
0

Ich versuche, Navigationsschlüssel zu verwenden, um Eingabebefehle vom Benutzer abzurufen. Zum Beispiel: - Wenn der Benutzer den Navigationsschlüssel Right drückt, sollte eine Methode aufgerufen werden, um eine Aufgabe auszuführen. Unten ist das Stück Code, habe ich versucht, für diesen Zweck zu verwenden:Verwenden von Navigationstasten als Eingabe in Windows Forms

private void MainForm_Load(object sender, EventArgs e) 
{ 
    KeyPreview = true; 
    this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.MainForm_KeyPress); 
} 

private void MainForm_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    switch (e.KeyChar) 
    { 
     case (char)Keys.Right: 
      NextMenuItem_Click(sender, EventArgs.Empty); 
      break; 
    } 
} 

Beachten Sie, dass dies für andere Tasten wie Alphabete, Schlüssel Numeric-Keys und sogar eingeben fein gearbeitet. Aber irgendwie funktioniert nicht für Links, Rechts, Oben, Unten Navigationstasten.

Bitte führen Sie mich. Ich werde froh und dankbar Ihnen sein :-) Ihre Antwort wird geschätzt! (Ich verwende Visual Studio 2017)

Antwort

2

verwenden, die anstelle des Schalters und behandeln das KeyDown-Ereignis statt des KeyPress-Ereignis:

switch (e.KeyCode) 
{ 
    case Keys.Right: 
     NextMenuItem_Click(sender, EventArgs.Empty); 
     e.Handled = true; 
     e.Suppressed = true; 
     break; 
} 

Und ich glaube nicht, dass Sie festlegen müssen die KeyPreview Option. Das Problem mit Ihrem Code ist, dass Sie versuchen, den richtigen Schlüssel zu einem Zeichen zu analysieren, das nicht wie erwartet funktioniert.

+0

Okay Danke Sir @MetaColon ... Habe den Punkt :-) Ich erkenne meinen Fehler jetzt! –

1

Sie können nur auf andere Schlüssel neben den Buchstaben und Zahlen zugreifen, wenn Sie das Ereignis KeyDown anstelle von KeyPressed behandeln. Dann können Sie die Keys enum verwenden.

+0

Bitte beachten Sie @MetaColon Handhabung und Unterdrückung der Tastendruck. Vergessen Sie jedoch nicht, den Ereignistyp zu wechseln. – oelsardine

+0

Danke, das habe ich übersehen. – MetaColon