TextChanged dans une TextBox

Résolu
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013 - 3 févr. 2009 à 11:27
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 5 févr. 2009 à 16:59
Bonjour à tous,

J'ai un petit souci avec l'événement textchanged de ma TextBox
Pour le moment elle ressemble à çà :

private void tbCode_TextChanged(object sender, EventArgs e)
        {
            if (man == true)
            {
                if (tbCode.TextLength == 8)
                {
                    tbCode.Select(0, 8);
                    //Scan();
                }
            }
            else
            {                              
                if (tbCode.TextLength == 13)
                {
                    tbCode.Select(0, 13);
                    Scan();
                }
                if (tbCode.TextLength == 12)
                {
                    tbCode.Select(0, 12);
                    Scan();
                }               
            }           
        }

Cependant cela ne fonctionne pas comme je le souhaite.
En effet j'aimerais pouvoir entrer des codes à 12 ou a 13 caractères mais le problème c'est qu'il va s'arrêter à 12 si je veut en entrer un de 13, je doit pouvoir entrer le nombre de caractère voulu 12 ou 13 n'importe quand.
Puisque j'utilise un terminal à code barre du style Pocket PC, et selon le style de code barre j'ai 12 ou 13 caractères.

Merci de m'aider un peu, là je galère trop xD

8 réponses

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
3 févr. 2009 à 15:12
Je comprends mieux.
L'événement TextChanged ne t'aidera pas alors puisque qu'il est déclenché trop souvent et surtout une action (12 caractères passera avant l'autre).
Il te faut donc une action de validation.

Et ton action de validation correspond à une des situations suivantes:
1) on passe la douchette => on sait que le bon nombre de chiffre est récupéré d'un coup !

2) on clique sur un bouton valider (tu peux ajouter cette option sur ton interface => le clic validera les données et effacera le textbox)

3) on appuie sur Entrée lorsque l'on est dans le textbox
Tu enregistres l'événement "KeyPress" du textbox puis:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   if (e.KeyChar == '\r')
   {
      //Traitement
    }
}

Et si on regarde bien lors d'un passage en caisse, c'est ce qui se passe.
1) Soit la cassière passe la douchette => OK
2) Soit la cassière tape le code-barre PUIS appuie sur OK (ou sur une touche de son clavier afin de valider qu'elle a terminé la saisie).

Je ne vois pas d'autre choix.

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
3
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
3 févr. 2009 à 15:37
Merci beaucoup de tes remarques,
cependant, la douchette sert pour faire des inventaires et donc je ne vais pas demander aux utilisateurs de valider la lecture d'un code barre à chaque fois.

j'ai peut être omis de dire que mes codes à 12 chiffres commence par "0000" et 8 autres ensuite, grâce à cela j'ai juste fais un contrôle supplémentaire. Les codes à 13 chiffres ne commence jamais par "0000":

String codeT = tbCode.Text;
                if (codeT.StartsWith("0000") && codeT.Length == 12)
                {   
                    tbCode.Select(0, tbCode.TextLength);
                    Scan();
                }   
                               
                if (codeT.Length == 13)
                {
                    tbCode.Select(0, tbCode.TextLength);
                    Scan();                   
                }                           

Voilà, c'est peut être pas la meilleure solution, mais çà fonctionne automatiquement et ça me suffit.

Cela aurait été beaucoup plus simple si j'avais réussi à faire fonctionner l'évenément de lecture de la douchette, mais je ne sais pour qu'elles raisons, je ne passe jamais dedans même avec les DLL du fournisseur.

Merci encore.
3
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
3 févr. 2009 à 13:21
Bonjour,

Peux-tu nous donner plus d'information sur ton code.
A quoi correspondant la variable man ?

Merci,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
3 févr. 2009 à 13:59
Oui donc la variable man est utilisée pour savoir si je suis en mode de saisie manuel ou automatique.

J'explique un peu mon code :

J'ai une TextBox qui me permet d'entrer un code string, qui est lu grâce à ma douchette ou alors je peux la saisir à la main.
Le lecture doit pouvoir lire différents type de code barre, un à 12 chiffres et un à 13 chiffres.

Donc si la Textbox reçoit 12chiffres elle lance un procédure de "Scan" qui me permet de faire des contrôles sur mes données et connaître les relations existantes. La procèdure Scan() reprend le TextBox.Text pour faire ses contrôles.

Et si la Textbox reçoit 13 chiffres elle fait la même chose.

Le souci est que la lecture et l'écriture est faite lettre par lettre et donc à partir de 12chiffres la procèdure Scan() ce lance sans prendre le dernier chiffre et là ERREUR Code Incorrect.

Je cherche donc comment réussir à attendre la saisie complète du code avant de lancer la procédure.

Merci.
0

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

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
3 févr. 2009 à 15:15
Ou sinon, à toi de switcher d'un mode à l'autre (12 ou 13 caractères) via un bouton ou autre.
Ou, si le nombre de chiffre est toujours le même lorsque ton logiciel est livré. Sers toi du fichier de configuration pour définir le nombre de chiffre.

Mais je ne pense pas que ces idées soient la solution,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
3 févr. 2009 à 15:43
Effectivement, avec cette vérif, ca devrait être bon.
Cependant, dans mes solutions, la solution douchette ne demandait pas validation de l'utilisateur. Car si tu lis avec la douchette, tu récupère tout d'un bloc et donc, tu ne peux pas te tromper !

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
0
cs_vagg Messages postés 102 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 24 janvier 2013
3 févr. 2009 à 16:05
Oui effectivement, mais dans la réalité la douchette écrit le code caractère par  caractère et non en un bloc comme je le pensais au début, j'ai pu vérifier cela en faisant un Thread.Sleep(500) et on voyait nettement les caractères arrivant 1 à la fois.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
5 févr. 2009 à 16:59
L'autre solution (si on ne pouvait pas distinguer des codes à 12 ou 13 chiffres), c'est de faire un timer par exemple d'1 sec quand on entre le 12eme chiffre. Si entre temps, un 13ème chiffre est inséré, on stop le timer et on a notre code à 13 chiffre. Sinon, à la fin du timer, on valide en temps que code à 12 chiffres.
0
Rejoignez-nous