TextChanged dans une TextBox [Résolu]

Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 3 févr. 2009 à 11:27 - Dernière réponse :
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 3 févr. 2009 à 15:12
3
Merci
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
---------------------

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de billou_13
Meilleure réponse
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 3 févr. 2009 à 15:37
3
Merci
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.

Merci cs_vagg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_vagg
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 3 févr. 2009 à 13:21
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 3 févr. 2009 à 13:59
0
Merci
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.
Commenter la réponse de cs_vagg
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 3 févr. 2009 à 15:15
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
- 3 févr. 2009 à 15:43
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 3 févr. 2009 à 16:05
0
Merci
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.
Commenter la réponse de cs_vagg
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Dernière intervention
14 février 2015
- 5 févr. 2009 à 16:59
0
Merci
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.
Commenter la réponse de krimog

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.