Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Windows Forms kann Tastatureingaben nutzen und ändern. Die Nutzung einer Taste bezieht sich auf die Behandlung einer Taste innerhalb einer Methode oder eines Ereignishandlers, sodass andere Methoden und Ereignisse weiter unten in der Meldungswarteschlange den Tastenwert nicht empfangen. Und das Ändern eines Schlüssels bezieht sich auf das Ändern des Werts eines Schlüssels, sodass Methoden und Ereignishandler weiter unten in der Nachrichtenwarteschlange einen anderen Schlüsselwert erhalten. In diesem Artikel wird gezeigt, wie Sie diese Aufgaben ausführen.
Nutzen einer Taste
Legen Sie in einem KeyPress-Ereignishandler die Handled-Eigenschaft der KeyPressEventArgs-Klasse auf true
fest.
-oder-
Legen Sie in einem KeyDown-Ereignishandler die Handled-Eigenschaft der KeyEventArgs-Klasse auf true
fest.
Hinweis
Das Festlegen der Handled Eigenschaft im KeyDown Ereignishandler verhindert nicht, dass die KeyPressKeyUp Ereignisse für den aktuellen Tastenanschlag ausgelöst werden. Verwenden Sie hierzu die eigenschaft SuppressKeyPress.
Im folgenden Beispiel wird das KeyPress-Ereignis verarbeitet, um die Tasten für die Zeichen A
und a
zu verwenden. Diese Tasten können nicht in das Textfeld eingegeben werden:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'a' || e.KeyChar == 'A')
e.Handled = true;
}
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
If e.KeyChar = "a"c Or e.KeyChar = "A"c Then
e.Handled = True
End If
End Sub
Ändern einer Standardzeichentaste
Legen Sie in einem KeyPress-Ereignishandler die KeyChar-Eigenschaft der KeyPressEventArgs-Klasse auf den Wert der neuen Zeichentaste fest.
Im folgenden Beispiel wird das KeyPress-Ereignis verarbeitet, um die Tasten für die Zeichen A
und a
in !
zu ändern:
private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 'a' || e.KeyChar == 'A')
{
e.KeyChar = '!';
e.Handled = false;
}
}
Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs)
If e.KeyChar = "a"c Or e.KeyChar = "A"c Then
e.KeyChar = "!"c
e.Handled = False
End If
End Sub
Ändern einer Nichtzeichentaste
Sie können Tastendruckaktionen für Nichtzeichentasten nur ändern, indem vom Steuerelement geerbt und die PreProcessMessage-Methode überschrieben wird. Wenn die Eingabe Message an das Steuerelement gesendet wird, wird sie verarbeitet, bevor das Steuerelement Ereignisse auslöst. Sie können diese Nachrichten abfangen, um sie zu ändern oder zu blockieren.
Im folgenden Codebeispiel wird veranschaulicht, wie die Message.WParam-Eigenschaft des m
-Parameters verwendet wird, um die gedrückte Taste zu ändern. Dieser Code erkennt einen Schlüssel von F1 bis F10 und übersetzt den Schlüssel in einen numerischen Schlüssel, der von 0 bis 9 reicht (bei dem F10 auf 0abgebildet wird).
public override bool PreProcessMessage(ref Message m)
{
const int WM_KEYDOWN = 0x100;
if (m.Msg == WM_KEYDOWN)
{
Keys keyCode = (Keys)m.WParam & Keys.KeyCode;
// Detect F1 through F9.
m.WParam = keyCode switch
{
Keys.F1 => (IntPtr)Keys.D1,
Keys.F2 => (IntPtr)Keys.D2,
Keys.F3 => (IntPtr)Keys.D3,
Keys.F4 => (IntPtr)Keys.D4,
Keys.F5 => (IntPtr)Keys.D5,
Keys.F6 => (IntPtr)Keys.D6,
Keys.F7 => (IntPtr)Keys.D7,
Keys.F8 => (IntPtr)Keys.D8,
Keys.F9 => (IntPtr)Keys.D9,
Keys.F10 => (IntPtr)Keys.D0,
_ => m.WParam
};
}
// Send all other messages to the base method.
return base.PreProcessMessage(ref m);
}
Public Overrides Function PreProcessMessage(ByRef m As Message) As Boolean
Const WM_KEYDOWN = &H100
If m.Msg = WM_KEYDOWN Then
Dim keyCode As Keys = CType(m.WParam, Keys) And Keys.KeyCode
Select Case keyCode
Case Keys.F1 : m.WParam = CType(Keys.D1, IntPtr)
Case Keys.F2 : m.WParam = CType(Keys.D2, IntPtr)
Case Keys.F3 : m.WParam = CType(Keys.D3, IntPtr)
Case Keys.F4 : m.WParam = CType(Keys.D4, IntPtr)
Case Keys.F5 : m.WParam = CType(Keys.D5, IntPtr)
Case Keys.F6 : m.WParam = CType(Keys.D6, IntPtr)
Case Keys.F7 : m.WParam = CType(Keys.D7, IntPtr)
Case Keys.F8 : m.WParam = CType(Keys.D8, IntPtr)
Case Keys.F9 : m.WParam = CType(Keys.D9, IntPtr)
Case Keys.F10 : m.WParam = CType(Keys.D0, IntPtr)
End Select
End If
Return MyBase.PreProcessMessage(m)
End Function
Siehe auch
.NET Desktop feedback