IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

C# windows form progressbar n'avance pas sur les premier ticks du timer.


Sujet :

C#

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 2
    Points
    2
    Par défaut C# windows form progressbar n'avance pas sur les premier ticks du timer.
    Salut
    voici mon probleme :
    J'ai un progress bar dans une boite de dialogue .
    Je change une image chaque fois, que j'atteint le max du progress bar.
    Le changement d'image fonctionne.
    Malheureusement , la progressbar n'est pas au bout.
    J'ai verifié les valeur de min et de maximum, et tous va bien, la procedure executé a chaque tick de mon timer fonctionne coreectement seulement si l'intervalle de tick est >550ms, avec une valeur de 600, les premier tick, font afficher ma barre correctement,
    avec une valeur de 250 (par exemple), les premier tick se passe, mais ma barre ne s'affiche qu'au bout du 4emme, voir 5emme , ou plus tick.
    Plus je reduit l'intervall, plus la barre met un nombre de tick superieur pour s'afficher !
    Est que quelqu'un pourrait m'éclairer, m'aider, je peut mettre du code si qqun veut bien m'aider . svp ?

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    probleme de type
    il ne faut pas travailler avec des int pour tes calcul, sinon ils sont arrontis aux entiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int x = 3;
    int y = 2;
    int resultat = x/y; //resultat vaudra 1 et non 1.5
    pour tes pourcentages de progression, tu dois faire quelque chose comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progressbar.Value =(int) ( (float) x / 100.0f );

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse ... même si cela n'a pas regler, mon probleme, en effet,
    je ne fait aucun calcul de progressbar.value, juste progressBar1.Increment(1); donc, normalement je ne devrais pas avoir de probleme,

    en mettant l'interval de tick de mon timer a 5secondes, je débug ... progressBar1.value passe bien de 0 a 20 (de 1 en 1) puis je la réinitialise a 0 ... et la barre de progression s'affiche correctement du debut a la fin ....

    si mon timer execute un tick tous les 250ms la, la barre ne s'affiche pas correctement, du moins au début et pendant quelque tick ...
    par contre mes valeur de progressBar1.value sont corrects

    (je les affichent dans ma boite de dialogue - elles sont correctes !!!) Je ne comprend pas ... Il est possible que j'écrive mal, autre chose ... ???

    J'ai tenter un progressBar1.Refresh(); apres l'incrémentation,
    cela ne change rien. Merci pour votre aide ! Svp

    Je viens de passer quatres heures sur le projet en essayant des tas de choses, le resultat est toujours le meme ...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Re bonjour,

    J'ai ajouté une tracbar a ma forme pour controler le bon fonctionnement de
    mon timer et de la procedure appelée automatiquement a tous les ticks...

    Mon progressbar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                this.progressBar1.AccessibleRole = System.Windows.Forms.AccessibleRole.ProgressBar;
                this.progressBar1.BackColor = System.Drawing.Color.Tan;
                this.progressBar1.Cursor = System.Windows.Forms.Cursors.No;
                this.progressBar1.ForeColor = System.Drawing.Color.Olive;
                this.progressBar1.Location = new System.Drawing.Point(434, 199);
                this.progressBar1.Maximum = 20;
                this.progressBar1.Name = "progressBar1";
                this.progressBar1.Size = new System.Drawing.Size(294, 23);
                this.progressBar1.TabIndex = 7;
    Mon trackbar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                this.trackBar1.Location = new System.Drawing.Point(437, 123);
                this.trackBar1.Maximum = 20;
                this.trackBar1.Name = "trackBar1";
                this.trackBar1.Size = new System.Drawing.Size(284, 45);
                this.trackBar1.TabIndex = 14;
    Mon timer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                this.timer_2.Interval = 250;
                this.timer_2.Tick += new System.EventHandler(this.timer_2_Tick);
                this.timer_2.Enabled = false;
    Mon timer lance cette procedure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
           private void timer_2_Tick(object sender, EventArgs e)
            {
                if (this.progressBar1.Value == this.progressBar1.Maximum)
                {
                    this.progressBar1.Value = 0;
                    this.trackBar1.Value = 0;
                    this.label5.Text = "Compte = " + this.progressBar1.Value;
                    if (this.on_front == true)
                    {
                        this.pictureBox3.Image = this.pictureBox2.Image;
                        //                this.pictureBox1.SendToBack();
                        this.on_front = false;
                    }
                    else
                    {
                        this.pictureBox3.Image = this.pictureBox1.Image;
                        this.on_front = true;
                    }
     
                }
                else
                {
                    this.progressBar1.Increment(1);
                    this.label5.Text = "Compte = " + this.progressBar1.Value;
                    this.trackBar1.Value += 1;
                }
            }
    Resultat : Le tracbar avance de deux ou trois crans, mais la progressbar ne commence a avancer qu'apres (vide pendant 2 ou trois tick)... Au final, la progressbar ne va jamais jusqu'au bout ... Le trackbar oui. J'affiche la valeur de this.progressBar1.Value, elle va bien de 0 a 20 ( de 1 en 1), mais la position de la progressbar ne correspond pas du tout !!!

    Il n'y a plus d'autre traitement effectué, a part ca ... Je ne comprend vraiment pas, besoin d'aide, merci ...

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    bonsoir,

    J'ai creer une windowsformapplication toute simple avec juste un bouton,
    et une progress bar ... code ci dessous pour la gestion de l'avancée du
    progressbar avec le timer.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            
            // Clique sur le bouton button1:
            //*************************
            private void button1_Click(object sender, EventArgs e)
            {
                System.Windows.Forms.Timer timer_1 = new System.Windows.Forms.Timer();
                timer_1.Tick += new System.EventHandler(this.timer_1_Tick);
                timer_1.Enabled = true;
                timer_1.Interval = 600;
                progressBar1.Minimum = 0;
                progressBar1.Maximum = 50;
                timer_1.Start();
    
            }
    
            // Fonction appellé a interval regulier grace au timer:
            //*******************************************
            private void timer_1_Tick(object sender, EventArgs e)
            {
                if (this.progressBar1.Value == this.progressBar1.Maximum)
                    this.progressBar1.Value = 0;
                else
                    this.progressBar1.Increment(1);
            }
    
        }
    }
    Tout fonctionne correctement avec une valeur de 600 pour l'interval !

    Rien ne vas plus pour une valeur de 200 !!! ... La progressbar n'avance qu'apres un certain temps !!! et ne vas plus jusqu'au bout ! ...
    (Par contre , une fois démarré, il avance correctement quand meme ... incompréhensible ... initialisation d'un progressbar foireuse ??? .... je ne sais vraiment pas ...)

    J'en déduit : Que le progressbar ne gere pas correctement son fonctionnement si l'interval est trop petit ( Ca parait dingue et
    pourtant ! ... )
    Si quelqu'un peut me confirmer cette information, ce serait vraiment bien ... et me permettrait de mettre en résolu ...
    Peut etre n'ai je pas été assez clair dans mes explication, je ne sait pas (Merci de me dire ... cela aussi ! )
    Merci a tous ceux qui auront une idée, a partir me traiter de débutant (Je plaisante !!!)
    MERCI BEAUCOUP D'AVANCE !!!

    Matt du 38

Discussions similaires

  1. Réponses: 20
    Dernier message: 06/10/2011, 00h11
  2. Réponses: 3
    Dernier message: 13/02/2009, 15h49
  3. progressbar n'avance pas
    Par purple21 dans le forum Flash
    Réponses: 4
    Dernier message: 16/06/2007, 11h00
  4. [CSS] border-collapse sur les TR mais pas sur les TD.
    Par hpfx dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 03/04/2005, 16h16
  5. Réponses: 10
    Dernier message: 22/02/2005, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo