begin process at 2010 03 22 06:37:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Mise à jour progressbar


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mise à jour progressbar

dimanche 5 octobre 2008 à 11:02:20 | Mise à jour progressbar

SeKo54

Bonjour,

Je m'amuse actuellement à programmer un logiciel qui permet d'apprendre du vocabulaire. Pour cela mon application pioche un mot dans une base de donnée, attend une traduction et vérifie si le mot entré est juste. A chaque fois que l'utilisateur répond juste pour la traduction du mot une progressbar s'incrémente.

ex : Interrogation ==> mise a jour de la progress bar en fonction du nombre précédent de réponses justes ==> réponse utilisateur juste ou fausse ==> incrémentation ou non de la progress bar ==> interrogation autre mot .....

Mon problème vient du fait que le code pour incrémenter la progressbar s'exécute (pas de plantage et je constate que la valeur à incrémenter à bien été augmentée) mais la progress bar ne se met pas a jour une fois le mot saisi et validé. Je ne constate qu'elle est a jour seuleument lorsque le mot m'es soumis une seconde fois ...

J'utilise la fonction suivante pour mettre a jour : pgrb_mot.Value = nouvelle_valeur

Peut-être y a t-il moyen de forcer l'affichage de cette barre ... Si quelqu'un pouvait m'aider ? :)

(Je programme sous VB 2008)
dimanche 5 octobre 2008 à 12:02:24 | Re : Mise à jour progressbar

jmfmarques

Membre Club
Bonjour,

c'est le code de ta validation (toute la procédure) qu'il nous faut voir !
Juste une idée (avec boule de crystal) :
ordre chronologique :
1) apréciation de la validité de la réponse
2) mise à jour de ta variable nouvelle-valeur
3) mise à jour de la valeur de ta progressbar

(tout me donne à penser qu'au lieu de faire 1) puis 2) puis 3), tu fais 1), puis 3) puis 2) ===>> alors évidemment ...!!!

Un commentaire : je ne comprends pas l'utilité d'une variable nouvelle_valeur dont la valeur serait (double emploi, donc) celle déjà contenue dans la progressbar ...
dimanche 5 octobre 2008 à 13:00:47 | Re : Mise à jour progressbar

SeKo54

Bonjour, voici le code qui est utilisé :

'Tout démarre avec l'appui sur la touche entrée d'un TextBox   

'Quelques définitions:

'@theme est un type sujet
'Structure sujet
'    Dim titre As String
'    Dim nbmots As Integer
'    Dim progresssujet As Integer
'    Dim listemot() As mot
'    Dim nummot As Integer
'    Dim termine As Integer Nombre qui une fois a nbmots indique que
'End Structure

'Structure mot
'    Dim nom1 As String
'    Dim nom2 As String
'    Dim com As String
'    Dim nbjuste As Integer
'    Dim nbfaux As Integer
'    Dim progressmot As Integer
'    Dim appri As Boolean
'End Structure

'@pgrb est la progressbar utilisée

'la fonction corrige renvoie seuleument un booleen vrai ou faux en 'fonction de la véracité du mot saisi.

'la fonction interro renvoir simplement un nouveau numéro d'index qui correspondra au nouveau mot demandé

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = 13 Then 'code ascii correspondant a la touche entrée

            If corrige(TextBox1) = True Then 'REPONSE JUSTE

                'Mise a jour des paramètres du tableau en mémoire
                theme.listemot(theme.nummot).nbjuste = theme.listemot(theme.nummot).nbjuste + 1
                theme.listemot(theme.nummot).progressmot = theme.listemot(theme.nummot).progressmot + 1

                'Mise a jour des paramètres de l'interface (QUI NE SE FAIT PAS)
                pgrb_mot.Value = theme.listemot(theme.nummot).progressmot
                lbl_correction.Text = ""

            Else'REPONSE FAUSSE
                'Mise a jour des paramètres du tableau en mémoire
                theme.listemot(theme.nummot).nbfaux = theme.listemot(theme.nummot).nbfaux + 1
                theme.listemot(theme.nummot).progressmot = 0

                'Mise a jour des paramètres de l'interface (QUI NE SE FAIT PAS)
                pgrb_mot.Maximum = 5
                pgrb_mot.Value = theme.listemot(theme.nummot).progressmot

lbl_correction.Text = theme.listemot(theme.nummot).nom2

                GoTo motfaux

            End If

            TextBox1.Text = ""
            ToolStripProgressBar1.Value = theme.termine

            Call Sleep(700)
            '**********************************************************************


            'Redefinition du nouveau mot a apprendre
            Call Interro()

            'Choix de la larguer de la progress bar et de l'avancement (ICI LA MISE A JOUR FONCTIONNE)
            If theme.listemot(theme.nummot).nbfaux = 0 Then
                pgrb_mot.Maximum = 3
            Else
                pgrb_mot.Maximum = 5
            End If

            pgrb_mot.Value = theme.listemot(theme.nummot).progressmot

            lbl_interro.Text = theme.listemot(theme.nummot).nom1

        End If

motfaux:

    End Sub
dimanche 5 octobre 2008 à 13:03:40 | Re : Mise à jour progressbar

SeKo54

J'avais également intercalé un sleep comme vous pouvez le voir, cela pour être sûr que la progresse bar ne se rafraichissait pas trop rapidement avec la valeur du prochain mot... Mais apparement cela ne marche pas.

En tout cas merci
dimanche 5 octobre 2008 à 17:34:43 | Re : Mise à jour progressbar

Kevin.Ory

Salut,
Ca me semble un peu compliqué ton utilisation des structures....
L'incrémentation du nombre de réponses correctes doit se faire dans la structure sujet, pas mot. Ici tu incrémente une variable dans mot, alors que cette structure mot n'est plus utilisé pour le prochain mot (et donc vaut 0 pour le prochain mot)


dimanche 5 octobre 2008 à 20:51:04 | Re : Mise à jour progressbar

SeKo54

Désolé, je comprend pas bien ce que tu me dis...

En ce qui concerne la structure mot, je l'incrémente après chaque réponse de l'utilisateur. Une fois que l'incrémentation atteint une valeur que j'ai préalablement décidé (l'utilisateur a donc répondu juste un certain nombre de fois), je considère que l'utilisateur connait ce mot. Enfin je ne pense pas avoir de problème avec ma structure car elle semble fonctionner.

J'ai juste un problème avec ma progress bar qui malgré le fait de prendre la bonne valeur (pgrb.Value a bien changé entre une question et une autre) n'augmente pas sa barre juste après la saisie de l'utilisateur comme je le voudrai.

Si jamais je passe à coté d'un truc n'hésite pas à me corriger. Merci
lundi 6 octobre 2008 à 02:36:10 | Re : Mise à jour progressbar

Kevin.Ory

Ouais désolé, il est vrai que ce n'est pas très compréhensible ce que j'ai dis avant
Mais j'avais pas vraiment compris le problème... et mtn je ne comprend pas pourquoi ça ne fonctionne pas....

Theme.ListeMot(Theme.NumMot).ProgressMot = 0
pgrb_Mot.Value = Theme.ListeMot(Theme.NumMot).ProgressMot


Clair que si tu exécute ces 2 lignes de code que que la valeur de prgb_Mot ne vaut pas 0, il y a un problème.
Qu'en est-il de la valeur dans Theme.ListeMot(Theme.NumMot).ProgressMot, vaut-elle bien 0?
lundi 6 octobre 2008 à 09:14:26 | Re : Mise à jour progressbar

SeKo54

Bonjour,

Ce bout de code que tu me donnes et ce qui se passe au cas ou l'utilisateur répond faux. Dans ce cas, en exécutant la méthode pas à pas je vois qu'en sortant de TextBox1_KeyDown la pgrb est revenu à 0. Donc oui la valeur de la progress bar passe bien a 0.

En voyant ça j'avais supposé que je ne voyais pas la progress bar s'incrémenter lorsque je répondais juste car vb allait trop vite et m'avais déjà affiché la progress bar correspondant au prochain mot qui sera soumis à l'utilisateur. C'est pour cela que j'ai insérer un Sleep afin de pouvoir voir l'augmentation de la progress bar, mais ca ne semble pasmarcher ...
mardi 7 octobre 2008 à 03:18:06 | Re : Mise à jour progressbar

Kevin.Ory

Réponse acceptée !
Ok, donc si je comprend bien, tout fonctionne comme ça devrait

Pour la tempo, utilise un timer:
Lorsque l'utilisateur valide le mot qu'il a entré, tu affiche le résultat (vrai/faux, ProgressBar) et tu lance le timer (par exemple 5 secondes)
Lors du Timer_Tick, tu désactive le timer, tu sélectionne le nouveau mot à traduire et tu met l'affichage à jour.

Un Sleep ne fonctionne pas car cela arrête ton thread, et donc la mise à jour de l'affichage ne se fait plus. A la limite une boucle avec un DoEvents et un Sleep pourrait aller, mais c'est franchement pas élégant. Ca donne ceci:

   Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
        If e.KeyCode = Keys.Enter Then

            If Corrige(TextBox1) Then
                ' Correct
                ListeMot(NumMot).NbJuste += 1
                ListeMot(NumMot).ProgressMot += 1

                pgrb_mot.Value = ListeMot(NumMot).ProgressMot
                lbl_correction.Text = ""

                Timer1.Start()
            Else
                ' Faux
                ListeMot(NumMot).NbFaux += 1
                ListeMot(NumMot).ProgressMot += 1

                pgrb_mot.Maximum = 5
                pgrb_mot.Value = ListeMot(NumMot).ProgressMot
                lbl_correction.Text = ListeMot(NumMot).nom2

            End If

        End If
    End Sub


    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Timer1.Stop()
        TextBox1.Text = ""

        Call Interro()
        If ListeMot(NumMot).NbFaux = 0 Then
            pgrb_mot.Maximum = 3
        Else
            pgrb_mot.Maximum = 5
        End If

        pgrb_mot.Value = ListeMot(NumMot).ProgressMot
        lbl_interro.Text = ListeMot(NumMot).nom1

    End Sub

mardi 7 octobre 2008 à 19:46:54 | Re : Mise à jour progressbar

SeKo54

Héhé, OK ça m'a généré pas mal d'erreurs, et maintenant mon programme plante  mais c'est normal j'ai insérer ton bout de code comme un barbare (en plus mon code est un peu plus complexe que ce que j'ai posté ...)

Mais bon le principal : ca fonctionne, je vois bien la barre s'incrémenter. Merci à toi, je connaissais pas l'objet timer. Par contre tu peux m'expliquer un peu plus la différence entre le timer et la fonction sleep ? Je suppose que "arreter ton thread" signifie bloquer tout le programme en cours (y compris l'affichage) mais bon l'appel à sleep étant placé avant le nouvel appel à "Interro" je pensais que la mise à jour de l'interface aurait été faite avant ...



1 2

Cette discussion est classée dans : progress, mot, jour, progressbar, juste


Répondre à ce message

Sujets en rapport avec ce message

progress bar [ par energizer956956 ] bonjour,alors voila j'ai créé un UserForm avec une ProgressBar et maintenant je vouvrais que le userform se lance et que la progressbar s'incrémente a PB Progress Bar + Texte [ par ragnagnac ] J'ai un petit soucis et je vous le soumets donc Voilà, j'ai un formulaire qui s'ouvre et se ferme automatiquement via un Timer.Sur ce formulaire, il y Couleur ProgressBar [ par djgab21 ] Bonjour a tousDésolé si cette question a déja été résoluemais j'ai un petit problème pour la couleur des progress bar dans Microsoft Visual Basic 2005 Progressbar & DoEvents [ par Isabella ] Voila j'ai fait ceci : j'ai plusieurs exécution j'ai donc fait : sub chose() call progress call execut1 call execut2 end sub Sub progress() Dim compte Juste un mot [ par Shimiar ] Juste un mot pour dire qu'il ne faut absolument pas fermer vbfrance car c'est ce qui aide, je suis sûr, bien des programmeurs. Pour ma part, c'est ce Juste un p'tit mot... [ par JEROMAX ] ... d'avertissement à tous ceux qui vont se lancer dans THE CONCOURS:Pour éviter ce qui s'est passé la derniere fois (ouaih l'autre il m'a piqué mon s Nouveau bug Access ???? [ par dany108 ] Quand je crée une requête ajout, sous Access 2000, pour tranférer des données d'une table de la base courante dans une autre base tout se passe bien s Progressbar et copie [ par pablo79 ] J'ai fait un programme qui facilite l'installation des Boot Screens sous Windows XP et quand il installe un boot screen je voudrais bien qu'à mesure q Au secours, ça urge !!!!!!! [ par dany108 ] Quand je crée une requête ajout, sous Access 2000, pour tranférer des données d'une table de la base courante dans une autre base tout se passe bien s Au secours, ça urge !!!!!!!!!!! [ par dany108 ] Quand je crée une requête ajout, sous Access 2000, pour tranférer des données d'une table de la base courante dans une autre base tout se passe bien s


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales