Modifier une textbox

Résolu
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 juillet 2009 - 28 févr. 2008 à 18:00
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 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:


private
void textBox1_PreviewKeyDown(
object sender,
PreviewKeyDownEventArgs e)


{








   switch
(e.KeyCode.ToString()){


case



"Tab"
:textBox1.Focus();


break
;}


if
(e.IsInputKey ==

false
)textBox1.Text = textBox1.Text + e.KeyCode.ToString() +


";"
;

}

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

7 réponses

vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 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.
3
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 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;
0
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 juillet 2009
3 mars 2008 à 15:34
Merci beaucoup pour cette solution c'est magnifique!!
0
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 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:

switch (e.KeyCode.ToString()){

case
"Tab":textBoxSeqTouches.Focus();

textBoxSeqTouches.Text = textBoxSeqTouches.Text + e.KeyCode.ToString() +

";";

break;

case
"Back":

break;

case
"Delete":

break;

default:textBoxSeqTouches.Text = textBoxSeqTouches.Text + e.KeyCode.ToString() +

";";

break;}

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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 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é.
0
vbmaniac8 Messages postés 17 Date d'inscription mercredi 19 juillet 2006 Statut Membre Dernière intervention 16 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:

private

void textBox1_PreviewKeyDown(
object sender,
PreviewKeyDownEventArgs e)
{

switch (e.KeyCode.ToString())
{

case
"Tab":
textBoxSeqTouches.Focus();
textBoxSeqTouches.Text = textBoxSeqTouches.Text + e.KeyCode.ToString() +
";";

break;

case
"Back":

break;

case
"Delete":

break;

default:
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 +
"Alt+" +e.KeyCode.ToString() +
";";
}

else
if (e.Control & e.KeyValue != 17)
{
textBoxSeqTouches.Text = textBoxSeqTouches.Text +
"Ctrl+" + e.KeyCode.ToString() +
";";
}

else
if (e.Shift & e.KeyValue != 16)
{
textBoxSeqTouches.Text = textBoxSeqTouches.Text +
"Shift+" + e.KeyCode.ToString() +
";";
}

else
textBoxSeqTouches.Text = textBoxSeqTouches.Text + e.KeyCode.ToString() +
";";

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
0
oximoron Messages postés 149 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 30 janvier 2009
3 mars 2008 à 19:51
bon bah de rien si j'ai pu de faire avancé dans ton problème. par contre pour le dernier je comprend pas :(
0
Rejoignez-nous