2009-07-20 12 views
2

Ich möchte den Fokus meiner Winform-Anwendung steuern. Es besteht aus einer benutzerdefinierten Listbox und mehreren anderen Komponenten. Ich möchte, dass alle Tastaturereignisse von meinen Fensterhandlern verwaltet werden, um eine bestimmte Steuerungstastenbehandlung zu vermeiden (wenn ich beispielsweise ein Zeichen drücke und das Listenfeld fokussiert, wird das mit dem entsprechenden Buchstaben beginnende Element ausgewählt, das nicht korrekt ist Verhalten für meine Bewerbung). Wie kann ich das erreichen?Winform Tastaturverwaltung

Antwort

4

Stellen Sie sicher, dass die KeyPreview-Eigenschaft Ihres Formulars auf True festgelegt ist. Dann sollten Sie diesen Code arbeiten für Ihre wichtigsten Ereignisse in das Listenfeld Cancelling ...

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (this.ActiveControl == listBox1) 
     e.Handled = true; 
} 

Das KeyPress-Ereignis nicht für alle Szenarien können funktionieren. In diesem Fall würde ich das KeyDown-Ereignis ausprobieren.

+0

Wird e.Handled auf "True" gesetzt, wird der Tastendruck verworfen? –

+0

Ja. Im Grunde sagen Sie dem Ereignis, dass Sie das Schlüsselereignis behandelt haben, und Sie möchten nicht, dass es damit etwas zu tun hat. – codeConcussion

+0

In der Tat habe ich KeyDown verwendet, die beiden folgenden Fall behandeln: - Bei der Eingabe von Zeichen sind die Listenelemente nicht ausgewählt. - Wenn Sie den Pfeil nach oben/unten drücken, ändert sich die Auswahl der Listenelemente nicht. Bitte bearbeiten Sie Ihre Antwort, damit ich sie als akzeptiert markieren kann. –