KeyDown erkennt den linken und den rechten richtungspfeil-Tasten, aber nicht oben und unten
Mit dem code unten, Links und Rechts Pfeil-Tasten funktionieren wie erwartet, aber die up-und down-Pfeile werden nicht erkannt (schrittweise durch die ersten beiden Bedingungen erfüllt sind, wo angebracht, aber die anderen beiden nie):
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
TextBox tb = (TextBox)sender;
if (e.KeyCode.Equals(Keys.Left)) {
SetFocusOneColumnBack(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Right)) {
SetFocusOneColumnForward(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Up)) {
SetFocusOneRowUp(tb.Name);
e.Handled = true;
return;
}
if (e.KeyCode.Equals(Keys.Down)) {
SetFocusOneRowDown(tb.Name);
e.Handled = true;
return;
}
}
Warum würde das sein, und wie kann ich es beheben?
UPDATE
Hier ist, was ich sehe, wenn ich den Mauszeiger über e.Keycode beim Durchlaufen. Wenn ich gedrückt
- ...Die linke Pfeiltaste, sehe ich:
e.KeyCode = "LButton | MButton | Space"
- ...- Rechts-Taste, sehe ich:
e.KeyCode = "LButton | RButton | MButton | Space"
- ...Die Up-Taste, sehe ich:
e.KeyCode = "RButton | MButton | Space"
- ...Die Down-Taste, sehe ich:
e.KeyCode = "Backspace | Space"
Dieser hat mich verblüfft (was zeigt Sie mir), aber auf keyleft und keyright, meinen code eingegeben werden - es ist nie für keyup und keydown, egal wie hart ich beiß mir die Zähne.
Setzen Sie einen break-Punkt an den Anfang Ihres event-handler. Ist es immer noch genannt wird für die up-und down-Tasten? Wenn nicht, etwas anderes ist immer das Ereignis und ruft
Ja, ich erwähne Durchlaufen es in meinem ursprünglichen Beitrag.
Gut, wie Sie verstärkt sind, durch Sie, was ist der Wert von
Gute Frage; beantwortet wurden (meinen Beitrag aktualisiert)
Das tun Sie, indem Sie jede chance nutzen, ein schickes Logitech die Tastatur? Oder sind Sie eine Codierung für eine mobile Plattform?
e.Handled = true
vor dieser handler bekommt die chance.Ja, ich erwähne Durchlaufen es in meinem ursprünglichen Beitrag.
Gut, wie Sie verstärkt sind, durch Sie, was ist der Wert von
e.KeyCode
für diese beiden Fälle?Gute Frage; beantwortet wurden (meinen Beitrag aktualisiert)
Das tun Sie, indem Sie jede chance nutzen, ein schickes Logitech die Tastatur? Oder sind Sie eine Codierung für eine mobile Plattform?
InformationsquelleAutor B. Clay Shannon | 2012-05-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Windows erfasst bestimmte Tasten für UI-navigation bevor Sie jeder geschickt bekommt Ihre form. Wenn Sie möchten, um dieses Verhalten zu überschreiben, die Sie brauchen, um eine überlastung der
IsInputKey
Methode (und Unterklasse des text-Feld):InformationsquelleAutor Hampus Nilsson
Finde ich, dass das PreviewKeyDown funktioniert (ich hatte zu entfernen die "e" haben.Handled = true" - code, wie es gilt nicht, in das PreviewKeyDown-Ereignis):
So, dass drei verschiedene Ereignisse, die nötig waren, um die Abwicklung der verschiedenen Tasten, die ich suchte: KeyPress für normale Zeichen, KeyDown für nicht-Zeichen (Links und rechts Pfeil-Tasten) und diese (PreviewKeyDown) für die aufwärts-und abwärts-Pfeiltasten.
PreviewKeyDown
sind Sie immer an derKeyCode
bevor irgendetwas anderes eine chance bekommt, es zu ändern. Meine Vermutung ist, dass irgendwo im code etwas tut, eine schlechte bitweise Kombination und Schlachten Sie den code, bevor es auf die KeyDown-Ereignis. Beachten Sie auch, dass Sie genauso leicht zu handhabenKeys.Left
undKeys.Right
hier in derPreviewKeyDown
Ereignis, was bedeutet, Sie brauchen nur 2 events statt 3.Ich denke, Hampus Nilsson beantwortet die Frage, warum Links und rechts waren die Verarbeitung richtig, aber oben und unten nicht. Das hat mich auf die Idee, zu versuchen, schneiden Fenster aus, auf dem pass durch abfangen Ihre abfangen, bevor Sie sich abfangen konnte.
+1 für "Abfangen Ihre abfangen bevor Sie überhaupt abfangen"
InformationsquelleAutor B. Clay Shannon
Können Sie diesen code verwenden:
InformationsquelleAutor Mojtaba Shateri Niasar
Wohl zu spät für die party, aber wenn jemand interessiert ist, verwenden Sie
e.KeyValue
statt, als ein Beispiel,e.KeyValue
für die linke Pfeiltaste ist37
und für rechts-Taste39
und so weiter.InformationsquelleAutor Ronny