Windows Forms - Tastendruck eingeben aktiviert Senden-Schaltfläche?


95

Wie kann ich Eingabetasten überall in meinem Formular erfassen und erzwingen, dass das Ereignis "Senden" ausgelöst wird?


8
Warum drücken Sie nicht die AcceptButton-Eigenschaft auf Matt Hamiltons Antwort?
Mukus

Verwenden Sie 'this.Form.DefaultButton = MyButton.UniqueID;'
Bino Kochumol Varghese

Antworten:


196

Wenn Sie die Eigenschaft Ihres Form's AcceptButtonauf eines der Buttons auf dem setzen Form, wird dieses Verhalten standardmäßig angezeigt.

Andernfalls setzen Sie die KeyPreviewEigenschaft trueauf Formund behandeln das KeyDownEreignis. Sie können nach dem EnterSchlüssel suchen und die erforderlichen Maßnahmen ergreifen.


8
und vergessen Sie nicht CancelButton für den Umgang mit Escape-Tastendruck
WholeLifeLearner

1
Genial! Ich muss meinen Framewrok besser kennen;)
Jack

24
private void textBox_KeyDown(object sender, KeyEventArgs e) 
{
    if (e.KeyCode == Keys.Enter)
        button.PerformClick();
}

22

Sie können eine Schaltfläche in den Eigenschaften des Formulars als "AcceptButton" festlegen. Dadurch werden alle "Enter" -Tastendrücke im Formular abgefangen und an dieses Steuerelement weitergeleitet.

Siehe Gewusst wie: Festlegen einer Windows Forms-Schaltfläche als Akzeptierschaltfläche mithilfe des Designers und beachten Sie die wenigen darin beschriebenen Ausnahmen (mehrzeilige Textfelder usw.).


Danke für den Link, diese Ausnahmen haben mich aufgehalten.
Ubiquibacon

Dieser Link scheint gestorben zu sein.
JAD

10

Wie bereits erwähnt, setzen Sie die AcceptButton- Eigenschaft Ihres Formulars auf eine der Schaltflächen UND setzen Sie die DialogResult- Eigenschaft für diese Schaltfläche auf DialogResult.OK , damit der Aufrufer weiß, ob der Dialog akzeptiert oder geschlossen wurde.


6

Sie können das KeyUpEreignis des abonnieren TextBox.

private void txtInput_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
       DoSomething();
}

1
Genau das, wonach ich gesucht habe. Ich habe das Ergebnis des Schaltflächendialogs auf OK gesetzt und wollte keinen unnötigen Code schreiben, damit ENTER funktioniert!
Kristjan1215


1

Einfach benutzen

this.Form.DefaultButton = MyButton.UniqueID;  

** Setzen Sie Ihre Button-ID anstelle von 'MyButton' ein.


0

Setzen Sie das KeyPreview-Attribut in Ihrem Formular auf True und verwenden Sie dann das KeyPress-Ereignis auf Formularebene, um die Eingabetaste zu erkennen. Rufen Sie bei der Erkennung den Code auf, den Sie für die Schaltfläche "Senden" hätten.


0
  if (e.KeyCode.ToString() == "Return")
  { 
      //do something
  }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.