Tastatur- und Mausereignisse: Tastaturereignisse

Jedes Steuerelement welches von der Basisklasse Control abstammt (unter anderem auch die Form-Klasse) besitzt Tastaturereignisse. Hier sind KeyDown, KeyUp und KeyPress zu nennen. Die Events werden normalerweise immer alle nacheinander in folgender Reihenfolge ausgelöst: KeyDown, KeyPress und zum Schluss KeyUp.
Das KeyDown-Event tritt ein, wenn eine Taste gedrückt wird. KeyUp dagegen löst aus, sobald eine Taste losgelassen wird. Als Event-Argumente werden dem KeyDown- und KeyUp-Ereignis KeyEventArgs übergeben. Über die Eigenschaften Alt, Control und Shift kann abgefragt werden, ob die Tasten Alt, Steuerung / Control und Shift gedrückt sind. Mit der Eigenschaft KeyValue können wir den Code (ASCII-Code, UTF8-Code, …) der gedrückten Taste abfragen. Hierbei ist zu beachten, dass nicht alle Tasten darstellbar sind. In den meisten Fällen (z. B. für Buchstaben) kann der Wert der Eigenschaft in die char gecastet werden. Die KeyCode-Eigenschaft enthält einen Wert der Enumeration Keys.
Das KeyPress-Event wird ausgelöst, wenn die Taste eines Zeichens, die Leertaste oder die Rücktaste gedrückt wurde. Hier werden als Event-Argumente die KeyPressEventArgs übergeben. Durch die KeyChar-Eigenschaft können wir das Zeichen (Datentyp char) der gedrückten Taste abrufen. Im Gegensatz zum KeyDown- und KeyUp-Event wird nicht immer ein Großbuchstabe zurückgegeben. Hier wird lediglich ein Großbuchstabe zurückgegeben, falls die Feststell- oder Umschalt-Taste gedrückt ist, andernfalls wird ein Kleinbuchstabe weitergeben. Für die meisten Fälle wird deshalb das KeyPressed-Ereignis eingesetzt, da es für den Programmierer die einfachste Schnittstelle anbietet. Über die Eigenschaft Handled können wir dem Steuerelement mitteilen, dass das Zeichen, welches in den Event-Argumenten in der Eigenschaft KeyChar festgelegt wurde, bereits behandelt wurde und nicht mehr weiter bearbeitet werden soll. Hierdurch könnten wir also abfangen, dass bestimmte Zeichen in eine TextBox eingegeben werden können, indem wir Handled auf true setzen.

Form1.cs

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
	labelKeyDown.Text = "";

	if (e.Alt)
		labelKeyDown.Text += "ALT ";
	if (e.Control)
		labelKeyDown.Text += "STRG ";
	if (e.Shift)
		labelKeyDown.Text += "SHIFT ";

	if (!char.IsControl((char)e.KeyValue))
		labelKeyDown.Text += ((char)e.KeyValue).ToString();
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
	labelKeyUp.Text = "";

	if (e.Alt)
		labelKeyUp.Text += "ALT ";
	if (e.Control)
		labelKeyUp.Text += "STRG ";
	if (e.Shift)
		labelKeyUp.Text += "SHIFT ";
	
	if (!char.IsControl((char)e.KeyValue))
		labelKeyUp.Text += ((char)e.KeyValue).ToString();
}

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
	if (!Char.IsControl(e.KeyChar))
		labelKeyPress.Text = e.KeyChar.ToString();
	else
		labelKeyPress.Text = "";
}
Download

LinksRechts