[Visual C#] Tastaturevent setzen

DasBossInDaHaus

Vice Admiral Special
Mitglied seit
30.07.2007
Beiträge
916
Renomée
7
Standort
zuhause ;-)
Moin,
beim coden knabber ich seit knapp 2 tagen an einem Problem und komm nicht weiter. Ich hoffe, Ihr könnt mir helfen :)

Ich habe ein Fenster und hinterlege Code für das "KeyDown"-Event:
Code:
Debug.WriteLine("blub");

Ich starte das Programm, drücke eine Taste auf der Tastatur und in der DebugKonsole erscheint das erwartete blub.

Sobald ich aber ein Control (in diesem Fall einen Button) anlege, kann ich auf jede beliebige Taste einhämmern, ohne dass die Konsole blub sagt.

Ich mutmaße einfach mal, dass in dem Moment ausschließlich der Button mitbekommt, dass eine Taste gedrückt wurde.

Aber wie bekomme ich es hin, dass bestimmter Code auf Tastendruck ausgeführt wird, egal wie viele Controls es gibt und welche ggf aktiviert sind?
 
Zuletzt bearbeitet:
Falls das Problem noch aktuell ist:
Da kein Code zu sehen ist, mutmaße ich mal du hast dir nur einen Handler gekrallt. Um genau zu sein, nur den Handler des Fensterobjektes, welcher nur triggert solang das Objekt aktiv ist.

Lösungsvorschläge:

Die Keyeventhandler beider Objekte zusammenführen oder die KeyPreview-Eigenschaft der Form auf true setzen. Hat beides Vor- und Nachteile.
 
Falls das Problem noch aktuell ist
Jap

mutmaße ich mal du hast dir nur einen Handler gekrallt. Um genau zu sein, nur den Handler des Fensterobjektes, welcher nur triggert solang das Objekt aktiv ist.

Das isses wahrscheinlich.

Lösungsvorschläge:

:D

Die Keyeventhandler beider Objekte zusammenführen
Wie stell ich das an?

oder die KeyPreview-Eigenschaft der Form auf true setzen.
Einfach den hebel im GUI von der entwicklungsumgebung umlegen?

Hat beides Vor- und Nachteile.

*ohren spitz*
 
Der einfachste Weg ist die Eigenschaft der Form zu setzen. Entweder im Code oder zB in VisualStudio direkt über die Controls des Editors.
siehe dazu: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview(v=VS.90).aspx

Vorteil: Wenig Aufwand. Die drei Basisevents KeyPress, KeyDown und KeyUp aller Controls dieser Form werden erstmal abgefangen vom entsprechenden Eventhandler der Form und nach Bearbeitung an die Controls weitergegeben.
Nachteil: Der Spaß kann schnell zu ungewollten Verhalten führen, wenn man die Form dynamisch verwendet in zB MDI-Anwendungen, Plugins etc. und auch das Ausschließen einzelner Controls kann dann zu einem Flickenteppich werden.

Das Zusammenführen von Handlern kann auf mehreren Wegen passieren, dazu am besten mal generell .Net-Eventhandler und die Delegatesgeschichte anschauen.

Simpelster Weg die Events zweier Controls zusammenzuführen in Auszügen:

button1.KeyPress += new KeyPressEventHandler(myKeyPress);
button2.KeyPress += new KeyPressEventHandler(myKeyPress);

und dazu brauchst natürlich noch die Methode:

void myKeyPress(object sender, KeyPressEventArgs e)
{
//wat auch immer
}
 
Zurück
Oben Unten