Tastatur- und Mausereignisse: Erweiterte Tastaturereignisse

Wenn Sie nun einige Tests mit den „normalen“ Tastaturereignissen gemacht haben, wird Ihnen auffallen, dass die Events in einigen speziellen Fällen nicht ausgelöst werden. Hier sind z. B. die Pfeiltasten oder die Tab-Taste zu nennen. Dies liegt daran, dass die Tab-Taste als Beispiel für das Springen von einem Textfeld zum nächsten genutzt wird und somit eine Sonderfunktion besitzt.
Wie können wir also solche Tasten abfangen? Grundsätzlich ist dies nur mit „höherer“ Programmiertechnik möglich, denn wir müssen hierzu eine Funktion, welche der Klasse Control angehört, überschreiben. Dazu benötigen wir das Schlüsselwort override, wodurch wir dem Compiler mitteilen, dass er nicht die Funktion der Basisklasse aufrufen soll, sondern die „überschriebene“ Funktion. Wollen wir innerhalb dieser Funktion doch die Funktion der Basisklasse aufrufen, so verwenden wir das Schlüsselwort base, gefolgt vom Funktionsaufruf. Die Funktion, welche zum Verarbeiten der Tasten-Anschläge verwendet wird heißt ProcessCmdKey(), welche eine Nachricht (Klasse Message, für uns jedoch unbedeutend) und die gedrückte Taste (Enumeration Keys) übergeben werden. Der Rückgabewert ist ein bool, welcher angibt, ob der Tasten-Anschlag vom Steuerelement verarbeitet wurde.
Zu beachten ist, dass wir im Beispiel die Funktion des kompletten Formulars überschrieben haben. In einigen Fällen ist es jedoch u. U. nur gewollt, die Funktion eines einzelnen Steuerelements zu überschreiben. Hierfür müssen wir eine eigene Klasse erstellen, welche als Basisklasse die Klasse des Steuerelements enthält. In dieser erstellten Klasse können wir dann die Funktion überschreiben. Jedoch muss beachtet werden, dass in einem solchen Fall im Designer nicht die sonst verwendete Klasse des Steuerelements gewählt werden darf, sondern die von uns erstellte Klasse des Steuerelements genutzt werden muss.

Form1.cs

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
	switch (keyData)
	{
		// da wir eine System-Methode für Tastaturanschläge überschrieben haben, werden die Pfeiltasten
		// für links und rechts in den Textboxen nicht mehr funktionieren!
		case Keys.Left:
			labelInfo.Text = "linke Pfeiltaste";
			return true;
		case Keys.Right:
			labelInfo.Text = "rechte Pfeiltaste";
			return true;

		case Keys.Tab:
			// die Tab-Taste wird zwar ebenfalls abgefangen, jedoch rufen wir über die base.ProcessCmdKey()
			// die Funktion der Basis-Klasse auf, wodurch die Tab-Funktionalität weiterhin gegeben ist
			labelInfo.Text = "Tabulator";
			return base.ProcessCmdKey(ref msg, keyData);

		default:
			// alle anderen Tastenanschläge werden an die Basis-Klasse weitergegeben
			return base.ProcessCmdKey(ref msg, keyData);
	}
}
Download

LinksRechts