Bonjour ! Je vous explique mon problème. J'ai un textbox dans lequel l'utilisateur saisie des valeurs pour générer une formule de calcul.

pour avoir une idée du user control : http://www.imagup.com/data/1169551783.html

Dans le champ de saisie des valeurs numérique, l'utilisateur peut saisir 17*3 touche entrée.
Cela va ajouter dans la ListBox (retemplatiser of course) 3 objets : [ 17 ] [ x ] [ 3].
Il est donc possible pour l'utilisateur de saisir des opérateurs de calculs dans le textbox pour éviter de cliquer sur les boutons correspondant.

Mais en production, on s'est rendu compte que les utilisateurs qui ont un portable 13 pouces sans pavé numérique ne peuvent pas faire la même chose car la valeur du e.Key est différente !
Je ne le savais même pas ! Bien entendu, le e.Key est identique pour tout ce qui est caractère classique.
Mais pour les caractères de parenthèses sur un clavier avec pavé num :
parenthèse ouvrante == e.Key = Key.D5
parenthèse fermante == e.Key = Key.Unknown
touche multiplié du pavé num == e.Key = Key.Multiply

Les valeurs sont différentes !


De plus si jamais le clavier est qwerty, on aura le même genre de problème !
Du coup je voulais savoir si le e.KeyCode correspond à la valeur que représente la touche (comme un code ascii par exemple) ou bien c'est l'identifiant d'une touche ?

Code de mon KeyDown event : (la partie qui nous intéresse)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
If e.Key = Key.Multiply Then
	AjouterCalcul(New CalculModel(StaticData.GetOperateur("*")), 1)
	e.Handled = True
 
ElseIf e.Key = Key.D5 Then
	AjouterCalcul(New CalculModel(New OperateurModel() With {.Libelle = "(", .Valeur = "(", .TypeOperateur = TypesOperateur.Arithmetique}), 1)
	e.Handled = True
 
ElseIf e.Key = Key.Unknown Then
	AjouterCalcul(New CalculModel(New OperateurModel() With {.Libelle = ")", .Valeur = ")", .TypeOperateur = TypesOperateur.Arithmetique}), 1)
	e.Handled = True
 
End If
Ca peut paraître bizarre mes AjouterCalcul(). ils vont juste ajouter dans liste bindé à la ListBox des éléments.
Le type d'opérateur permet de choisir le bon template dans mon TemplateSelector et pour plus tard, générer un arbre de calcul.

J'ai vu qu'il y avait l'event TextInputStart qui possède dans e.Text la valeur qui vient d'être ajouté dans le textbox.
Donc pour la touche Key.D5 qui correspond à la parenthèse ouvrante, e.Text == "(" le problème est que je ne souhaite pas que la valeur soit affiché dans le textbox mais bien directement intégré à ma liste.

Je cherche une solution valide pour Windows / Mac (donc pas forcément le e.KeyCodePlatform du KeyDownEvent) fonctionne avec ou sans pavé numérique et en azerty ou qwerty.
Le tout, sans afficher de caractère dans mon textbox.

Comment feriez vous à ma place ? Bonne journée à vous (ou bon weekend pour les veinards). Cordialement, Nicolas.