Ich behandle derzeit das KeyDown-Ereignis eines DataGridView-Steuerelements. Eine der Spalten wird mit berechneten Werten gefüllt, und ich möchte, dass der Benutzer den Zellenwert bei Bedarf überschreiben kann.
Wenn der Benutzer eine Zifferntaste drückt, wechselt die Zelle in EditMode und ermöglicht dem Benutzer, den Wert zu überschreiben. Wenn der Schlüssel nicht numerisch ist, passiert nichts ...
Das funktioniert ziemlich gut ... das Problem ist, dass ich den Code dafür hässlich finde ... Ich finde keinen ordentlichen Weg, um alle numerischen Tasten in einer einzigen Bedingung zu behandeln, also habe ich ein Schalterfall-Konstrukt gemacht, um mit allen möglichen numerischen Schlüsseln umzugehen, wie folgt:
%Vor%Sicher, es funktioniert, aber es muss einen besseren und kürzeren Weg geben, richtig?
Alles, was ich mit Google finden konnte, ist e.KeyCode in ein Zeichen umzuwandeln, aber wenn man numerische Tasten benutzt, gibt es Buchstaben sogar für die numerischen Werte ...
Danke.
Warum Tastencodes verwenden, wenn Sie dies verwenden können:
%Vor%Es ist sauberer und selbst wenn Microsoft entscheidet, alle enums vlue zu ändern, würde es immer noch funktionieren
Die Lösung von Sorcerer86pt war die einfachste, wenn jedoch ein Benutzer eine Steuertaste drückt (wie die Rücktaste), dann bricht er ab. Um dieses Problem zu lösen, können Sie das folgende Snippet verwenden:
%Vor%Wenn Sie WPF verwenden, stellen Sie möglicherweise fest, dass eine TextBox kein KeyPressed-Ereignis aufweist. Um dies zu beheben, habe ich den folgenden Code verwendet.
%Vor% Vielleicht bemerken Sie den seltsamen Funktionsaufruf KeyPress
. Dies ist eine der nützlichen Funktionen, die ich gesammelt habe.
Sie finden es hier .
Holen Sie sich das letzte Zeichen von der Taste, die Nummer ist, wenn eine Zahl gedrückt wurde. Diese Methode funktioniert mit KeyDown-Ereignissen, die keine anderen Bedingungen benötigen.
Rufen Sie einfach diese statische Methode auf und übergeben Sie den zu überprüfenden Schlüssel
%Vor%Ich behandle derzeit das KeyDown-Ereignis eines DataGridView-Steuerelements. Eine der Spalten wird mit berechneten Werten gefüllt, und ich möchte, dass der Benutzer den Zellenwert bei Bedarf überschreiben kann.
Wenn der Benutzer eine Zifferntaste drückt, wechselt die Zelle in EditMode und ermöglicht dem Benutzer, den Wert zu überschreiben. Wenn der Schlüssel nicht numerisch ist, passiert nichts ...
Das funktioniert ziemlich gut ... das Problem ist, dass ich den Code dafür hässlich finde ... Ich finde keinen ordentlichen Weg, um alle numerischen Tasten in einer einzigen Bedingung zu behandeln, also habe ich ein Schalterfall-Konstrukt gemacht, um mit allen möglichen numerischen Schlüsseln umzugehen, wie folgt:
%Vor%Sicher, es funktioniert, aber es muss einen besseren und kürzeren Weg geben, richtig?
Alles, was ich mit Google finden konnte, ist e.KeyCode in ein Zeichen umzuwandeln, aber wenn man numerische Tasten benutzt, gibt es Buchstaben sogar für die numerischen Werte ...
Danke.
Versuchen Sie
%Vor%Eine etwas kompaktere Version:
%Vor%Auf der msdn-Hilfeseite verwenden sie diesen Code in ihren Beispiel:
%Vor%...
%Vor% Wenn Sie das KeyPressEventArgs
-Ereignis verwenden, hat die Ereignissignatur ein KeyChar
mit einem %code% -Member, das Ihnen das Zeichen für die Nummernblockschlüssel gibt. Sie können ein TryParse dazu machen, um herauszufinden, ob es eine Zahl ist oder nicht.
Warum Tastencodes verwenden, wenn Sie dies verwenden können:
%Vor%Es ist sauberer und selbst wenn Microsoft entscheidet, alle enums vlue zu ändern, würde es immer noch funktionieren
Die Lösung von Sorcerer86pt war die einfachste, wenn jedoch ein Benutzer eine Steuertaste drückt (wie die Rücktaste), dann bricht er ab. Um dieses Problem zu lösen, können Sie das folgende Snippet verwenden:
%Vor%Wenn Sie WPF verwenden, stellen Sie möglicherweise fest, dass eine TextBox kein KeyPressed-Ereignis aufweist. Um dies zu beheben, habe ich den folgenden Code verwendet.
%Vor% Vielleicht bemerken Sie den seltsamen Funktionsaufruf WPFUtils.Interop.Keyboard.GetCharFromKey(e.Key)
. Dies ist eine der nützlichen Funktionen, die ich gesammelt habe.
Sie finden es hier .
Holen Sie sich das letzte Zeichen von der Taste, die Nummer ist, wenn eine Zahl gedrückt wurde. Diese Methode funktioniert mit KeyDown-Ereignissen, die keine anderen Bedingungen benötigen.
Rufen Sie einfach diese statische Methode auf und übergeben Sie den zu überprüfenden Schlüssel
%Vor%Auf der msdn-Hilfeseite verwenden sie diesen Code in ihren Beispiel:
%Vor%...
%Vor%Tags und Links c# datagridview keydown