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?

FlySwat
quelle
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.

Matt Hamilton
quelle
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();
}
ruvi
quelle
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.).

Bouvard
quelle
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.

Sorin Comanescu
quelle
6

Sie können das KeyUpEreignis des abonnieren TextBox.

private void txtInput_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
       DoSomething();
}
Sanjeev
quelle
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
2

Das Formular verfügt über eine KeyPreview- Eigenschaft, mit der Sie den Tastendruck abfangen können.

itsmatt
quelle
1

Einfach benutzen

this.Form.DefaultButton = MyButton.UniqueID;  

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

Bino Kochumol Varghese
quelle
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.

Rechnung
quelle
0
  if (e.KeyCode.ToString() == "Return")
  { 
      //do something
  }
BenW
quelle