2010-10-04 6 views
0

Pourquoi cette recette est malDifficulté KeyChar

 if (e.KeyChar <= (char)Keys.NumPad0 && e.KeyChar >= (char)Keys.NumPad2) 
     { 
      if (e.KeyChar <= (char)Keys.O && e.KeyChar >= (char)Keys.Oem2) 
      { 
       MessageBox.Show("Yes"); 
      } 
     } 

Je veux être des nombres compris entre 0 et 2

Répondre

2
Keys.O 

puisque vous ne pouvez pas démarrer le nom ENUM avec 0 (numéro zéro) cela doit être O (lettre o)

et la logique tout semble erronée, il devrait être quelque chose comme

if ((e.KeyChar >= (char)Keys.NumPad0 && e.KeyChar <= (char)Keys.NumPad2) || (e.KeyChar => (char)Keys.Oem0 && e.KeyChar <= (char)Keys.Oem2)) 

(je ne suis pas sûr> = et < = et Oem0)

1

Entre 0 et 2 ...

e.KeyChar >= (char)Keys.NumPad0 && e.KeyChar <= (char)Keys.NumPad2 
+0

Les gens lisent trop souvent ces choses :). – bastijn

3

Vous vérifiez qu'il est égal ou inférieur à 0 et en même temps égal ou supérieur à 2. Ce n'est pas possible. Vous devez passer votre supérieur à moins que et et vice versa, et de gérer à la fois numpad et d'autres touches numériques, passez à ceci:

if (e.KeyChar >= (char)48 && e.KeyChar <= (char)50) 
    ... 
+0

a augmenté le vôtre sur Jonathan car c'est une réponse plus complète. – bastijn

2

Je ne peux pas dire si ce code est présent dans un KeyDown ou Gestionnaire d'événements KeyPress. Si vous souhaitez filtrer les clés de frappe, vous devez utiliser KeyPress. Et le code est alors simplement:

 if (e.KeyChar >= '0' && e.KeyChar <= '2') { 
      MessageBox.Show("yes"); 
     }