Windows Forms - Enter keypress aktywuje przycisk przesyłania?

95

Jak mogę przechwycić naciśnięcia klawiszy w dowolnym miejscu formularza i zmusić go do uruchomienia zdarzenia przycisku przesyłania?

FlySwat
źródło
8
Dlaczego więc nie naciśniesz właściwości AcceptButton w odpowiedzi Matta Hamiltona?
Mukus
use 'this.Form.DefaultButton = MyButton.UniqueID;'
Bino Kochumol Varghese

Odpowiedzi:

196

Jeśli Twoje ustawienia Form„s AcceptButtonwłaściwość do jednego z ButtonS na Form, dostaniesz to zachowanie domyślne.

W przeciwnym razie ustaw KeyPreviewwłaściwość truena Formi obsłuż jej KeyDownzdarzenie. Możesz sprawdzić Enterklucz i podjąć niezbędne działania.

Matt Hamilton
źródło
8
i nie zapomnij o CancelButton do obsługi Escape
keypress
1
Niesamowite! Muszę lepiej poznać moje Framewrok;)
Jack
24
private void textBox_KeyDown(object sender, KeyEventArgs e) 
{
    if (e.KeyCode == Keys.Enter)
        button.PerformClick();
}
ruvi
źródło
22

Możesz wyznaczyć przycisk jako „AcceptButton” we właściwościach formularza, który będzie przechwytywał wszelkie naciśnięcia klawiszy „Enter” w formularzu i kierował je do tej kontrolki.

Zobacz, jak: wyznaczyć przycisk Windows Forms jako przycisk akceptacji za pomocą projektanta i zwróć uwagę na kilka wyjątków, które przedstawia (wielowierszowe pola tekstowe itp.)

bouvard
źródło
Dzięki za link, te wyjątki, w których mnie trzymają.
ubiquibacon
Wygląda na to, że ten link umarł.
JAD
10

Jak wspomniano wcześniej, ustaw właściwość AcceptButton formularza na jeden z jego przycisków ORAZ ustaw właściwość DialogResult dla tego przycisku na DialogResult.OK , aby wywołujący wiedział, czy okno dialogowe zostało zaakceptowane, czy odrzucone.

Sorin Comanescu
źródło
6

Możesz zapisać się na KeyUpwydarzenie TextBox.

private void txtInput_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
       DoSomething();
}
sanjeev
źródło
1
Właśnie tego szukałem. Mam okno dialogowe przycisku ustawione na OK i nie chciałem pisać niepotrzebnego kodu, aby ENTER działał!
Kristjan1215
2

Form ma właściwość KeyPreview , której można użyć do przechwycenia naciśnięcia klawisza.

itsmatt
źródło
1

Po prostu użyj

this.Form.DefaultButton = MyButton.UniqueID;  

** Umieść identyfikator przycisku w miejscu „MyButton”.

Bino Kochumol Varghese
źródło
0

Ustaw atrybut KeyPreview w formularzu na True, a następnie użyj zdarzenia KeyPress na poziomie formularza, aby wykryć klawisz Enter. Po wykryciu wywołaj dowolny kod, który chcesz przypisać do przycisku „Prześlij”.

Rachunek
źródło
0
  if (e.KeyCode.ToString() == "Return")
  { 
      //do something
  }
BenW
źródło