2012-03-26 5 views
1

ich eine winform Form haben, die typischen Schaltflächen OK und Abbrechen hat.Wie kann ich die Standard-Schaltfläche auf einem Formular außer Kraft setzen, wenn der Fokus in einem Text ist

Die OK-Taste wird als Standard-Schaltfläche. Wenn der Benutzer die EINGABETASTE drückt, wird das Formular geschlossen.

Die Form hat auch ein Textfeld, das eine Such-Schaltfläche daneben hat. Das Textfeld ermöglicht dem Benutzer, Suchtext einzugeben, und die Schaltfläche Suchen startet die Suchfunktion.

Ich möchte der Benutzer in der Lage sein, die Taste ENTER zu drücken, wenn das Textfeld den Eingabefokus hat und haben die Suchfunktion aktivieren.

Das Problem ist, dass die Form der Schlüsselereignis ENTER Grabbing vor dem Handler wird es das Textfeld ein.

EDIT: Ich habe versucht, die folgenden Event-Handler verwenden, aber sie treffen nie bekommen, und die Form wird geschlossen, wenn die Enter-Taste getroffen wird:

private void txtFilter_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      Search(); 

      e.Handled = true;   
     } 
    } 

    private void txtFilter_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      Search(); 

      e.Handled = true; 
     } 
    } 

ich auch die KeyPreview Eigenschaft versucht haben, ermöglicht auf Das Formular und das Implementieren eines KeyDown-Ereignishandlers für das Formular, aber die Eingabetaste scheint niemals dazu zu führen.

Was ist der beste Weg, dies zu erreichen?

+0

Bitte geben Sie mehr Details - wie die Ereigniserfassung für Formular und Textfeld implementiert ist? –

Antwort

3

Versuchen Sie, die Enter und Leave Ereignisse des TextBox Umgang mit Ihrem Formular AcceptButton Eigentum zu räumen:

private void txtFilter_Enter(object sender, EventArgs e) { 
    this.AcceptButton = null; 
} 

private void txtFilter_Leave(object sender, EventArgs e) { 
    this.AcceptButton = closeButton; 
} 

Dann können Sie einfach Ihr KeyUp Ereignis wie gewünscht bearbeiten:

+0

Ich dachte darüber nach, dies zu versuchen, bevor du es gepostet hast und es funktioniert super! Vielen Dank!! – Avalanchis

0

ein KeyDown-Ereignishandler der Textbox hinzufügen und diese dann, um es

hinzufügen
 if (e.KeyCode == Keys.Enter) 
     { 
      btnSearch.PerformClick(); 
     } 
+0

Ich habe versucht, dies sowohl für KeyDown und KeyUp Event Handler, aber keiner der Handler jemals getroffen, und das Formular schließt. – Avalanchis

Verwandte Themen