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 :

Fenetre secondaire progressbar


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Fenetre secondaire progressbar
    Bonjour,
    Le chargement de mon logiciel met du temps. Je voudrai mettre en place une progressbar qui permetterai d'indiquer à l'utilisateur l'évolution du chargement.

    Mon problème c'est que ma fenêtre principale est celle qui met du temps à se charger, et je voudrai créer une fenetre secondaire qui sera composée que de ma progressbar. Je n'ai pas d'idée pour créer une seconde fenetre, qui en gros serai à l'image d'un MessageBox mais avec une progressbar.

    Si quelqu'un peut me proposer des idées.

    Au début je pensais créer un nouveau Control.ControlCollection, ...:
    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
    private void Form1_Load(object sender, EventArgs e)
            {
                Control.ControlCollection fene;
                ProgressBar prog = new ProgressBar();
                prog.Location = new System.Drawing.Point(12, 44);
                prog.Name = "progressBar1";
                prog.Size = new System.Drawing.Size(260, 23);
                prog.TabIndex = 1;
                prog.Minimum = 0;
                prog.Maximum = alfa.bdd.bibli.Count;
                fene.Add(prog);
                foreach (Index beta in alfa.bdd.bibli)
                {
                    this.comboBox1.Items.Add(beta.name);
                    prog.Value++;
                }
            }
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai remarqué que le code que j'avais mis précedement était n'importe quoi.
    Je pense, si je ne me trompe pas, qu'il serai plus simple de créer un autre WindowsForm.
    Donc maintenant j'ai ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void Form1_Load(object sender, EventArgs e)
            {
                Form2 chargement = new Form2(alfa.bdd.bibli.Count); //en paramètre le maximum de la progressbar, ce max est le nombre d'éléments dans la BDD
                foreach (Index beta in alfa.bdd.bibli)
                {
                    this.comboBox1.Items.Add(beta.name);
                    chargement.SetProgression(this.comboBox1.Items.Count);  //en paramètre le nombre d'élément rajouté dans la combobox
                }
            }
    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
    public partial class Form2 : Form
        {
            private int compteur;
            public Form2(int progressBarMax)
            {
                InitializeComponent();
                this.progressBar1.Maximum = progressBarMax;
                this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
                this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
                this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
                this.backgroundWorker1.RunWorkerAsync();
            }
            public void SetProgression(int progression)
            {
                this.compteur = progression;
            }
            private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
            {
                while (this.compteur < this.progressBar1.Maximum && !this.backgroundWorker1.CancellationPending)   //Tant et aussi longtemps que la barre n'a pas atteint le 100% et qu'on ne demande pas à annuler...
                {
                    this.backgroundWorker1.ReportProgress(this.compteur); //On rapporte le progrès fait.
                }
            }
            private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                this.progressBar1.Value = e.ProgressPercentage;  //On fait avancer la ProgressBar.
            }
            private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //this.Close();
            }
        }
    Mais quand je lance le programme, cette nouvelle fenêtre contenant la progresse bar n'apparait pas.

  3. #3
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Re-Bonjour,

    C'est normal, instancier une fenêtre et l'afficher, ce sont deux choses différentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Form2 chargement = new Form2(alfa.bdd.bibli.Count); //en paramètre le maximum de la progressbar, ce max est le nombre d'éléments dans la BDD
                chargement.Show();
                foreach (Index beta in alfa.bdd.bibli)
                {
                    this.comboBox1.Items.Add(beta.name);
                    chargement.SetProgression(this.comboBox1.Items.Count);  //en paramètre le nombre d'élément rajouté dans la combobox
                }
    Bon dév.

  4. #4
    Invité
    Invité(e)
    Par défaut
    D'accord merci. C'est bon maintenant ma fenetre contenant la progressBar s'affiche mais il n'y a pas de progression.
    Le déboguage m'affiche ça:



    Vous avez une idée?
    Images attachées Images attachées  

  5. #5
    Invité
    Invité(e)
    Par défaut
    C'est bon j'ai pu corriger le problème affiché par le déboguage, j'avais oublié de blindé la condition this.compteur!=0 dans le while:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while (this.compteur != 0 && this.compteur < this.progressBar1.Maximum && !this.backgroundWorker1.CancellationPending)   //Tant et aussi longtemps que la barre n'a pas atteint le 100% et qu'on ne demande pas à annuler...
    {
                    this.backgroundWorker1.ReportProgress(this.compteur); //On rapporte le progrès fait.
    }
    Mais ma progressBar ne progresse toujours pas

  6. #6
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Tu utilises un Backgroundworker, c'est pas du tout nécessaire. Tu dois seulement mettre à jour ta progessbar comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     public void SetProgression(int progression)
            {
                this.progressBar1.Value = progression;
            }

  7. #7
    Invité
    Invité(e)
    Par défaut
    Merci.
    Avant de mettre ce post en résolu j'aurai une dernière question.
    Est-ce que en C# il est possible de créer des popup, comme en Java? Pour que je mette la progressBar dedans, ça me paraîtrait plus clean.
    Ou sinon comment forcer la fenêtre de ma progressBar à être en premier plan et enlever les boutons reduire, agrandire et fermer?

    C'est bon je viens de trouver la reponse à mes question, c'est la propriété FormBorderStyle de ma WindowsForm qui doit être à None.
    Dernière modification par Invité ; 27/02/2012 à 00h01.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Comment faire pour que la fenêtre secondaire, celle de la progressBar se ferme automatiquement dés que la progressBar est complètement remplie?

    C'est comme ça non?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
          this.Close();
    }

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est bon j'ai réussi mais je ne sais pas si c'est du "propre":


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void SetProgression(object progression)
    {
         this.progressBar1.Value = (int)progression;
         if (this.progressBar1.Value == this.progressBar1.Maximum)
              this.Close();
    }
    Dernière modification par Invité ; 27/02/2012 à 23h53.

Discussions similaires

  1. Traduction d'une fenetre secondaire
    Par hizoka dans le forum PyQt
    Réponses: 38
    Dernier message: 13/09/2016, 18h19
  2. Hide dans fenetre secondaire
    Par yann_DZ dans le forum VB.NET
    Réponses: 19
    Dernier message: 30/03/2010, 21h17
  3. Fenetre secondaire
    Par guyguy333 dans le forum Qt
    Réponses: 4
    Dernier message: 30/05/2008, 22h49
  4. Fenetre secondaire au premier plan
    Par Theleme dans le forum C++Builder
    Réponses: 12
    Dernier message: 27/10/2006, 00h10
  5. ouvrir une fenetre secondaire depuis 1 bouton
    Par TheBlackReverand dans le forum MFC
    Réponses: 7
    Dernier message: 16/03/2006, 22h02

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