/ / Numpad0 funktioniert nicht mit char.IsLetterOrDigit - c #, onkeyup

Numpad0 funktioniert nicht mit char.IsLetterOrDigit - c #, onkeyup

Ich habe eine Methode, die ich beim KeyUp anrufeDas Ereignis wird auf meinem Steuerelement ausgelöst, und innerhalb dieser Methode prüfe ich, ob die gedrückte Taste ein Buchstabe oder eine Ziffer ist, und zwar mit der Methode char.IsLetterOrDigit. Es scheint jedoch nicht mit den KeyPad-Nummern zu funktionieren !?

Mein Code ist unten:

    void MyControls_KeyUp(object sender, KeyEventArgs e)
{
if ((char.IsLetterOrDigit(Convert.ToChar(e.KeyValue))))
{
....
}
}

Hat jemand eine Idee, warum das nicht funktioniert?

Danke im Voraus.

Ich verwende C # 4.0

Antworten:

4 für die Antwort № 1

Du machst nicht das, was du denkst.

Convert.ToChar() Ich nehme keinen Tastaturcode und wende ihn anin das Zeichen, das dieser Schlüssel darstellt; Es ist zu viel mit diesem Thema beschäftigt, was mit verschiedenen Tastaturlayouts, Kulturen, Status der Schlüsselmodifikatoren usw. ist. Was Sie hier tun, ist das numerischer Wert der KeyCode-Enumeration und wirft es zu char.

Wenn Sie das Zeichen abrufen möchten, das mit einem Tastendruck verbunden ist, müssen Sie das überschreiben KeyPress Ereignis statt der KeyUp Veranstaltung. Windows Forms führt alle erforderlichen Übersetzungen und Konvertierungen durch, um festzustellen, welches Zeichen dem Schlüssel entspricht.


1 für die Antwort № 2

Mit KeyUp können Sie sich um alle Tasten auf derTastatur (einschließlich Sondertasten wie Funktion und Nummernblock). KeyValue oder KeyCode beziehen sich jedoch nicht immer auf den Charakter der gedrückten Schaltfläche.

KeyPress gibt den Charakter der gedrückten Taste an, behandelt jedoch keine Sondertasten (einschließlich Nummernblock, wenn die Numlock-Funktion deaktiviert ist).

Wenn Sie ALLE Tasten auf einer Tastatur verwenden möchten,Ich verwende KeyUp. E.KeyValue gibt die Werte in der Keys-Enumeration zurück (Nummernblock 0 ist Keys.NumPad0). Wenn Sie nur mit eingegebenen Werten umgehen möchten, verwenden Sie KeyPress.


1 für die Antwort № 3

Versuche dies :

if (e.KeyCode == Keys.NumPad0)
{
// your code
}
// else for other numpad keys