Ich habe folgendes versucht:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((Keys) e.KeyValue == Keys.Escape)
this.Close();
}
Aber es funktioniert nicht.
Dann habe ich das versucht:
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape)
this.Close();
}
Und immer noch funktioniert nichts.
Die KeyPreview in meinen Windows Forms-Formulareigenschaften ist auf true gesetzt ... Was mache ich falsch?
Antworten:
Dies funktioniert immer, unabhängig von der richtigen Zuweisung des Ereignishandlers, KeyPreview, CancelButton usw.:
quelle
true
vonProcessCmdKey
zu signalisieren , dass der Schlüssel gehandhabt wird, damit das „ding“ Rauschen verhindert wird .Sie sollten nur in der Lage sein, die
CancelButton
Eigenschaft des Formulars auf die Schaltfläche Abbrechen festzulegen, und benötigen dann keinen Code.quelle
Angenommen, Sie haben eine Schaltfläche "Abbrechen", sollte das Festlegen der
CancelButton
Eigenschaft des Formulars (entweder im Designer oder im Code) dies automatisch erledigen. Platzieren Sie einfach den Code, der imClick
Falle der Schaltfläche geschlossen werden soll.quelle
Die akzeptierte Antwort ist in der Tat richtig, und ich habe diesen Ansatz mehrmals verwendet. Plötzlich würde es nicht mehr funktionieren, also fand ich es seltsam. Meistens, weil mein Haltepunkt nicht für die ESCTaste getroffen würde, sondern für andere Tasten.
Nach dem Debuggen stellte ich fest, dass eines der Steuerelemente in meinem Formular die
ProcessCmdKey
Methode mit diesem Code überschrieb :... und dies verhinderte, dass mein Formular den ESCSchlüssel erhielt (beachten Sie das
return true
). Stellen Sie also sicher, dass keine untergeordneten Steuerelemente Ihre Eingabe übernehmen.quelle
Sie setzen KeyPreview in Ihren Formularoptionen auf true und fügen dann das Keypress-Ereignis hinzu. In Ihrem Tastendruckereignis geben Sie Folgendes ein:
key.Char == 27
ist der Wert von Escape im ASCII-Code.quelle
Mit der Schaltfläche "Escape" meinen Sie die Escape-Taste? Nach Ihrem Code zu urteilen, denke ich, dass Sie das wollen. Sie können auch Application.Exit () ausprobieren, aber Close sollte funktionieren. Hast du einen Arbeitsthread? Wenn ein Thread ohne Hintergrund ausgeführt wird, kann die Anwendung dadurch geöffnet bleiben.
quelle
Sie müssen dies zum Ereignis "KeyUp" hinzufügen.
quelle
Sie können auch ein anderes Formular auslösen.
Lösen Sie beispielsweise eine Abbrechen-Schaltfläche aus, wenn Sie die Eigenschaft Form CancelButton bearbeiten und die Schaltfläche Abbrechen festlegen.
Im Code behandeln Sie die Schaltfläche Abbrechen wie folgt, um das Formular zu schließen:
quelle