2012-01-18 34 views
21

Nel mio KeyDownEventHandler ho bisogno di sapere qual è il KeyCode per "," e ".".Qual è il KeyCode per "," (virgola) e "." (Punto) in .NET?

Non riesco a trovarli per quello che chiedo. Grazie!

+0

Sei sicuro che si desidera utilizzare il 'KeyDown' e non il gestore' KeyPress'? – CodesInChaos

+4

Il gestore di eventi KeyDown gestisce i tratti chiave, non la loro rappresentazione nel sistema, ciò che dipende dalle impostazioni regionali. Per gestire charakter, usa l'evento KeyPress. – pistipanko

risposta

19

Una chiave e un carattere non sono la stessa cosa. Il layout della tastiera si trasforma tra loro, e quella trasformazione non è banale. Probabilmente stai facendo la cosa sbagliata quando usi KeyDown. Se vuoi sapere quale personaggio è stato inserito da un utente, devi usare KeyPress, che fornisce il carattere già tradotto.

Ad esempio Keys.Decimal è una chiave sul tastierino numerico che corrisponde a . nel layout degli Stati Uniti e , nel layout tedesco. Keys.Oemcomma e OemPeriod sono probabilmente , e .. Ma su altri layout che potrebbero essere diversi.

+0

Keys.Deciaml è per il tastierino numerico per il secondo decimale? –

+1

Non c'è "secondo decimale". C'è una chiave per * virgola * e una per * periodo *, ma quale di loro produce il separatore decimale dipende dalla locale. Sono anche abbastanza sicuro che fare questa domanda significa che sei già sulla strada sbagliata. Dovresti lavorare con i caratteri, non con le chiavi. – CodesInChaos

2

ho fatto questo:

  1. Creato un progetto WinForm con una sola casella di testo.
  2. Aggiunto il gestore di eventi keydown.
  3. mettere un punto di interruzione in esso
  4. Ottenuto questo:

enter image description here

0

Usa Keys.Oemcomma e Keys.OemPeriod

0

Hai provato questo c

Un filtro galleggiare "":

Select Case e.KeyChar 
    Case "0"c To "9"c 
    Case "."c 
     If .Text.Contains(".") Then 
      e.Handled = True 
     End If 
    Case ChrW(Keys.Delete), ChrW(Keys.Back) 
    Case Else 
     e.Handled = True 
End Select 
+0

Esiste una sintassi C# per questo? – Bosak

Problemi correlati