vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009
-
28 févr. 2008 à 18:00
vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009
-
4 mars 2008 à 09:12
Bonjour,
J'ai besoin d'utiliser une textbox pour qu'elle me stocke une séquence de touches tapées au clavier.
J'aimerai donc la modifier afin qu'elle m'affiche le code de la touche entrée (keycode) à chaque fois séparés par des points-virgules. Plusieurs problème se posent:
Pour la touche Tab, je n'arrive pas à m'arrager pour que le controle garde le focus quand j'appuie sur Tab.
Pour les touches normales, mon contrôle se comporte comme un contrôle normal et n'affiche pas QUE le keycode, mais aussi le caractére tapé...
Voici mon code pour le contrôle en question sur l'evenement PreviewKeyDown:
Voila, donc comme je suis un peu débutant en c#, je me demande si je ne me trompe pas d'évènement, ou si je n'oublie tout simplement pas d'en gérer un.
Autre problème: quand je tape Alt+f par exemple, j'aimerai qu'il m'affiche Alt+F mais pour l'instant, ça affiche Alt;F; ou plus précisément fAlt;F; du au problème précédemment cité.
C'est un problème car voila, quand j'exploite le résultat, Alt+F et Alt;F ne donnerons pas le même résultat, je dois donc gérer l'appui sur plusieurs touches en même temps.
Si quelqu'un a une solution, pour la textbox ou une alternative, elle est la bienvenue!
Merci d'avance.
Au fait, je bosse en c# .NET sur VS2005 2.0
vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009 4 mars 2008 à 09:12
Bin en fait, j'ai trouvé!! Le problème venais du fait que j'affichait "Alt+" quand je tombai sur des touches normales avec le modifier non null.. Résultat, il m'affichait un alt pour le Alt et un Alt+ pour le C.... J'ai juste du enlever ça et ne mettre QUE "+" !! Comme ceci:if (e.Modifiers.ToString() !"None" & e.Alt false & e.Control == false & e.Shift == false)
{
textBoxSeqTouches.Text = textBoxSeqTouches.Text + e.KeyCode.ToString() + ";";
}
else
if (e.Alt & e.KeyValue != 18)
{
textBoxSeqTouches.Text = textBoxSeqTouches.Text + "+" +
e.KeyCode.ToString() + ";";
}
else
if (e.Control & e.KeyValue ! = 17)
{
textBoxSeqTouches.Text = textBoxSeqTouches.Text + "+" + e.KeyCode.ToString() + ";";
}
... Idem pour les autres touches.
Aprés, je voulais 3 touches en meme temps (par exemple Ctrl+Alt+Supp) mais apparement c'est pas gérable.
oximoron
Messages postés149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 janvier 2009 2 mars 2008 à 20:16
avec ca déjà ca évite que la touche tapée soit affiché dans la textbox
privatevoid textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = true;
//ton code ici avec le test des keycode et le remplissage de la text box par le code
}
et ca ca devrait résoudre ton problème de tab :
textBox1.Multiline =
true;
textBox1.AcceptsTab =
true;
vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009 3 mars 2008 à 15:47
...Reste un petit problème: du coup, a cause du "e.Handled = true", on peux plus effacer, c'est que j'ai pas besoin de gérer la touche "Back", mais je voudrai pouvoir effacer ce que j'ai mis en cas d'erreur.
Pour info, mon PreviewKeyDown a un peu évolué depuis le temps:
Il n'y a que pour Delete que ça fonctionne bien, et je n'ai toujours pas la solution pour la gestion de plusieurs touches tapées en meme temps. Si vous avez même juste une petite piste, elle est la bienvenue.
Merci!
Vous n’avez pas trouvé la réponse que vous recherchez ?
vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009 3 mars 2008 à 16:17
J'ai trouvé pour le Delete, on fais comme ceci dans le KeyPress:
if (e.KeyChar !'\b')e.Handled
true;
Ne reste plus qu'à gérer l'appui sur plusieurs touches,
j'ai remarqué que la touche suivante ne s'affiche pas tout de suite quand j'appuie sur Alt avant... il y a surement quelquechose à exploiter de ce coté.
vbmaniac8
Messages postés17Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention16 juillet 2009 3 mars 2008 à 17:58
Solution presque trouvée, j'en ai mis du temps mais c'est fait!! J'utilise la propriété modifiers du PreviewKeyDownEventArgs envoyé par le PreviewKeyDown. Ca donne ça:
break;
}
}
Reste un tout petit problème... Quand je fais par exemple Ctrl+C, il entre quand meme dans le dernier else pour la touche ctrl, meme si je met un case pour ces touches, il entre quand même dedans parceque je n'ai aucun moyen de contrôler la touche qui va éventuellement etre tapée simulatanément...
A suivre.....
PS: J'enregistrerai surement ma source sur le site quand j'aurai réglé tous les petits problèmes