KeyDown-Ereignis - Wie kann man leicht erkennen, ob die gedrückte Taste numerisch ist?

8

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.

    
Kharlos Dominguez 01.07.2010, 10:58
quelle

8 Antworten

10
___ qstnhdr ___ KeyDown-Ereignis - Wie kann man leicht erkennen, ob die gedrückte Taste numerisch ist? ___ answer7346390 ___

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

    
___ answer11970201 ___

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 .

    
___ answer16978111 ___

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%     
___ qstntxt ___

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.

    
___ answer3157152 ___

Versuchen Sie

%Vor%     
___ answer25625137 ___

Eine etwas kompaktere Version:

%Vor%     
___ answer3157148 ___

Auf der msdn-Hilfeseite verwenden sie diesen Code in ihren Beispiel:

%Vor%

...

%Vor%     
___ tag123datagridview ___ DataGridView ist ein Windows Forms-Steuerelement, das in .NET Framework ab Version 2.0 gefunden wird. Es wird verwendet, um Tabellendaten aus vielen verschiedenen Arten von Datenquellen anzuzeigen und zu bearbeiten. ___ tag123keydown ___ "keydown" ist ein Ereignis, das beim Schreiben von Software verwendet wird, die ausgelöst wird, wenn eine Taste auf der Tastatur gedrückt wird. Es geht normalerweise dem Ereignis "keyup" voraus. ___ answer3157224 ___
%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die für die Erstellung einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ answer3157188 ​​___

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.

%Vor%     
___
Tim Coker 01.07.2010, 11:10
quelle
13

Versuchen Sie

%Vor%     
Rawling 01.07.2010 11:06
quelle
6

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

    
Sorcerer86pt 08.09.2011 10:12
quelle
4

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 .

    
Kian 15.08.2012 13:32
quelle
2

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%     
nick 07.06.2013 07:00
quelle
1

Auf der msdn-Hilfeseite verwenden sie diesen Code in ihren Beispiel:

%Vor%

...

%Vor%     
tanascius 01.07.2010 11:05
quelle
1

Eine etwas kompaktere Version:

%Vor%     
bolt19 02.09.2014 13:53
quelle
0
%Vor%     
MrFox 01.07.2010 11:16
quelle

Tags und Links