Tastatureingaben / Event Handling

Nagilo

Mitglied
Erstmal ein großes sorry, daß dieses Thema nochmal angesprochen wird. Ich habe bereits im Forum gesucht und nur unvollständige Beispiele gefunden.

Ich möchte die Tastatur auf Eingaben (also keypress events) überwachen und diese auswerten. Die Eingaben sollen aber nicht unbedingt in der Console sichtbar sein - also kein Console.ReadLine oder ähnliches.

Soweit ich weiß, muß dies über Event Handling gelöst werden. Dieses ist nur leider in meiner vorrätigen Literatur schlecht beschrieben. Man braucht die Eventdefinition, einen Delegate und eine Methode die das Ereignis behandelt. Für eine simple Sache wie eine Tastatureingabe, muß das doch auch einfacher gehen, oder?

Könnte mir jemand dies bitte kurz und bündig am Beispiel von Tastatur-Events erläutern?

Vielen Dank im Voraus.
 
Hallo Nagilo!

Das KeyPress - Event wurde bereits in der Control - Klasse deklariert, und da alle Windows Forms von dieser Klasse abgeleitet sind, brauchst du das Event nur noch zuzweisen.


Beispiel Form1

Event-Handler:
Code:
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);

Methode (Beispielanwendung):
Code:
private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
	// ASCII Zeichencode ermitteln
         int taste = (int) e.KeyChar;

         if (taste == 13)
	 {
		MessageBox.Show("Enter - Taste gedrückt");
	 }

         if ((taste > 47 && taste < 58) || (taste > 64 && taste < 91) || (taste > 96 && taste < 123))
         {
		MessageBox.Show("Buchstabe oder Zahl eingegeben");
	 }
	
         e.Handled = true;			
}

Wenn du eine Entwicklungsumgebung wie Visual Studio oder Borland Builder benutzt, musst du das Event nicht mal manuell mit dem Event - Handler verbinden. Ich finde das ziemlich einfach, wenn aber jemand noch was einfacheres weis, soll er es posten...
 
Hallo,

danke für den Code, aber leider ging das nicht so einfach.

Ich mußte meiner einzigen Klasse namens MediaApp noch den Event KeyPress hinzufügen (Achtung: Console-Application). Zudem mußte ich System.Windows.Forms als Verweis hinzufügen.

Also folgende Zeile:

public event System.Windows.Forms.KeyPressEventHandler KeyPress;

In meiner Main-Methode steht dann folgendes in etwa:

string target_url = "blabla";
MediaApp myPlayer = new MediaApp();
myPlayer.PlayFile(target_url);
myPlayer.KeyPress += new System.Windows.Forms.KeyPressEventHandler(myPlayer.Form1_KeyPress);

while(myPlayer.end_app != true) {}

Sobald eine Tastatur-Eingabe erfolgt und das ENTER ist, wird in der Ereignisbehandlung myPlayer.end_app auf true gesetzt. Die while-Schleife müßte also aufhören und das Programm beenden. Leider passiert da gar nichts. Also egal was ich drücke. Es wird nie das Ereignis und die dazugehörige Behandlung aufgerufen. Hat jemand einen Rat?

Danke schonmal.

Nachtrag: Ich vermute es liegt daran, daß das Console-Fenster ja kein System.Windows.Form Element ist und daher auch keine Tastatureingaben vom o.g. EventTyp abgefangen werden. Leider weiß ich auch nicht, wie ich es der Application dennoch beibringe.
 
Zuletzt bearbeitet:
Danke, das war guter Code.

Ich werde dennoch auf System.Windows.Forms zurückgreifen und von der Console-Anwendung abgehen. Dann ist die Anwendung der Events deutlich logischer.

Vielen Dank nochmals.
 
Zurück