Progressbar en c# [Résolu]

cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 09:21 - Dernière réponse : cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention
- 13 mars 2011 à 12:22
Bonjour je pense la question à peut être déjà été poser mais je n'ai pas trouver de réponse qui à pu m'aider.

Je fais une fenêtre en c# avec des combobox (14 exactement) je souhaiterais faire avancer une progressbar en fonction des combobox remplies. C'est à dire qu'il faudrait que si une combobox n'est pas sur sa valeur par défaut (index =0 "non défini") la progressbar augmente.

Si quelqu'un peut m'aider ce serais vraiment bien.

Merci d'avance .

Guiguizeitzt
Afficher la suite 

Votre réponse

19 réponses

cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 09:48
+3
Utile
Bonjour

Voici un petit exemple:
pour l'exemple j'ai mis les combo dans un groupbox, cela permet de les retrouver plus facilement
a l'initialisation on recherche le nombre de combo dans le groupbox pour initialiser la barre de rogression
cela permet d'en ajouter sans changer le code
ensuite, si une des combo change, on recalcul la position de la barre de progression.

        public Form1()
        {
            InitializeComponent();
            ComboInit();
        }

        //initialisation, recherche les comboboxes et assigne l'evenement SelectedIndexChanged
        private void ComboInit()
        {
            int ComboCount = 0;//nbre de combo 
            foreach (Control c in groupBox1.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null )
                {
                    ComboCount++;
                    combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
                }
            }
            //initialisation de la barre de progression
            progressBar1.Value = 0;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = ComboCount;
        }

        //Calcul la barre de progression
        void combo_SelectedIndexChanged(object sender, EventArgs e)
        {
             int FilledComboCount = 0;//nbre de combo remplies
            foreach (Control c in groupBox1.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null && combo.SelectedIndex !=-1)
                        FilledComboCount++;
            }
            progressBar1.Value = FilledComboCount;
        }

Bob.
C# is amazing, enjoy it!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 11:24
+3
Utile
Pour la création de la progressbar passe plutot par le designer, ou alors pense à initialiser sa Location.
Dans ton code, ajoute la ligne 'ComboInit();', apres ta séquence d'initialisation, en fin du constructeur de Form1();
ensuite copie le code des méthodes ComboInit et combo_SelectedIndexChanged sous le constructeur

cela donne quelque chose comme:
public Form1()
{
   InitializeComponent();
   //Ta séquence d'initialisation
   ComboInit();
}

//initialisation, recherche les comboboxes et assigne l'evenement SelectedIndexChanged
private void ComboInit()
{
  ...
}
//Calcul la barre de progression
void combo_SelectedIndexChanged(object sender, EventArgs e)
{
  ...
}

Bob.
C# is amazing, enjoy it!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 mars 2011 à 10:20
+3
Utile
Dans la méthode void combo_SelectedIndexChanged(object sender, EventArgs e)
le test est fait sur l'index -1 : combo.SelectedIndex != -1
hors comme tu initialises avec SelectedIndex = 0;
la méthode consider la combo comme remplie.
Change le test par
if (combo != null && combo.SelectedIndex > 0)


Bob.
C# is amazing, enjoy it!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 10:36
0
Utile
Merci pour votre réponse je vais essayer ce code tout de suite!
Je vous redis ca !
=)
Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 10:55
0
Utile
je n'arrive pas à incruster ce code dans le miens :/
Voici le debut de mon code qui initialise mes combobox a la valeur par défaut, et un début d'idée que j'avais pour faire ma progressbar.
        public Form1()
        {
            InitializeComponent();
            this.choixvannes.SelectedIndex = 0;
            this.choixvis.SelectedIndex = 0;
            this.choixsilo.SelectedIndex = 0;
            this.choixvapeur.SelectedIndex = 0;
            this.choixcapteurs.SelectedIndex = 0;
            this.choixvitesse.SelectedIndex = 0;
            this.choixsechoir.SelectedIndex = 0;
            this.choixbitstop.SelectedIndex = 0;
            this.choixbitdonnees.SelectedIndex = 0;
            this.choixprotocole.SelectedIndex = 0;
            this.choixextrud.SelectedIndex = 0;
            this.choixbroyeur.SelectedIndex = 0;
            this.choixport.SelectedIndex = 0;
            this.choixparite.SelectedIndex = 0;
            this.progressBar1 = new System.Windows.Forms.ProgressBar();
            this.progressBar1.Minimum = 0;
            this.progressBar1.Maximum = 14;
            this.progressBar1.TabIndex = 0;
            this.progressBar1.Value = 0;
        }
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 11:33
0
Utile
J'ai bien fait ma progressbar par le designer.
Merci pour ta réponse ça va me permettre d'avancer un peu. Enfin je l'espère
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 11:49
0
Utile
J'ai bien mis ton code en changeant le groupbox par onglets parce mes combobox sont dans 2 onglets différents et le nom que j'ai donné est onglets mais ca n'avance toujours pas.
Mais bon point : aucune erreur à la compilation.
        private void ComboInit()
        {
            int ComboCount = 0;//nbre de combo 
            foreach (Control c in onglets.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null)
                {
                    ComboCount++;
                    combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
                }
            }
        }
        //Calcul la barre de progression
        void combo_SelectedIndexChanged(object sender, EventArgs e)
        {
            int FilledComboCount = 0;//nbre de combo remplies
            foreach (Control c in onglets.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null && combo.SelectedIndex != -1)
                    FilledComboCount++;
            }
            progressBar1.Value = FilledComboCount;
        }


Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 13:33
0
Utile
Par onglets veux-tu dire un control TabControl ou les pages TabPage?

car si onglets est un TabControl alors le code ne peux pas fonctionner, en effet la collection Controls contient les pages.
ce sont les pages qui contiennent les ComboBoxes.

Supposons que onglest soit un TabControl contenant des TabPage1 et TabPage2 alors il faut que tu utilises:

foreach (Control c in onglets.TabPage1) et foreach (Control c in onglets.TabPage2)

Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 13:42
0
Utile
oui en effet c'est c'est un tabcontrol !!
merci je vais tester cette solution..

Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 13:46
0
Utile
Si je dois mettre ce code la :

foreach (Control c in onglets.ongletaff)

ça ne fonctionne pas :/

erreur : Erreur 1 'System.Windows.Forms.TabControl' ne contient pas une définition pour 'ongletaff' et aucune méthode d'extension 'ongletaff' acceptant un premier argument de type 'System.Windows.Forms.TabControl' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?)

Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 14:21
0
Utile
J'ajoute un test que je viens de faire !

si je met :
foreach (Control c in ongletaff)


ca ne passe pas il me met une erreur : Erreur 1 L'instruction foreach ne peut pas fonctionner sur des variables de type 'System.Windows.Forms.TabPage', car 'System.Windows.Forms.TabPage' ne contient pas de définition public pour 'GetEnumerator'

Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 12 mars 2011 à 17:00
0
Utile
Essaye plutôt
foreach (Control c in ongletaff.Controls)

Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 19:11
0
Utile
Oui j'ai essayer ca du coup mais non il ne se passe rien on dirait que le programme ne lit pas le code :/
Mon code ma parait pourtant bon ...
namespace Générer_fichier_XML
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.choixvannes.SelectedIndex = 0;
            this.choixvis.SelectedIndex = 0;
            this.choixsilo.SelectedIndex = 0;
            this.choixvapeur.SelectedIndex = 0;
            this.choixcapteurs.SelectedIndex = 0;
            this.choixvitesse.SelectedIndex = 0;
            this.choixsechoir.SelectedIndex = 0;
            this.choixbitstop.SelectedIndex = 0;
            this.choixbitdonnees.SelectedIndex = 0;
            this.choixprotocole.SelectedIndex = 0;
            this.choixextrud.SelectedIndex = 0;
            this.choixbroyeur.SelectedIndex = 0;
            this.choixport.SelectedIndex = 0;
            this.choixparite.SelectedIndex = 0;
            ComboInit();
        }

        private void ComboInit()
        {
            int ComboCount = 0;//nbre de combo 
            foreach (Control c in onglets.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null)
                {
                    ComboCount++;
                    combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
                }
            }
        }
        //Calcul la barre de progression
        void combo_SelectedIndexChanged(object sender, EventArgs e)
        {
            int FilledComboCount = 0;//nbre de combo remplies
            foreach (Control c in ongletconf.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null && combo.SelectedIndex != -1)
                    FilledComboCount++;
            }
            foreach (Control c in ongletcom.Controls)
            {
                ComboBox combo = c as ComboBox;
                if (combo != null && combo.SelectedIndex != -1)
                    FilledComboCount++;
            }
            progressBar1.Value = FilledComboCount;
        }

  

        private void quit_Click(object sender, EventArgs e)
        {
            // Message de confirmation pour quitter
            if (MessageBox.Show("Etes-vous sûr de vouloir quitter la génération du fichier XML ?",
                "Quitter la page de configuration",

                // Bouton de choix oui ou non
                MessageBoxButtons.YesNo) == DialogResult.Yes)

                this.Close();
        }
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 19:14
0
Utile
Il n'y a pas des propriétés de la progressbar a changer ??
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 12 mars 2011 à 19:32
0
Utile
Avec le debugeur j'ai pu voir que la méthode comboinit() s'execute avant que la fenetre s'ouvre ...
Commenter la réponse de cs_guiguizeitzt
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 mars 2011 à 08:38
0
Utile
Salut guiguizeitzt

Quand tu dis "il ne se passe rien" que veux-tu dire exactement ?
car il se passe toujours quelque chose.

Dans la methode ComboInit, il faut aussi modifier pour compter le nombre de combo dans chaque page
comme pour la methode combo_SelectedIndexChanged(...)
Car avec le code que tu as, la méthode ComboInit ne fait rien.

Sous debugger, mets un point d'arret sur la ligne "ComboCount++;" pour être certain que les combo soient bien detectées.


Bob.
C# is amazing, enjoy it!
Commenter la réponse de cs_Robert33
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 13 mars 2011 à 09:56
0
Utile
Merci j'ai bien fait la modification. Et j'ai bien vu avec le point d'arrêt que le combocount montait jusqu'à 14, donc ca c'est bon.
Mais là quand je rempli une seulle combobox la barre monte directement d'un coup...
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 13 mars 2011 à 10:14
0
Utile
Quand je rempli une combobox la variable : FilledComboCount se met a 14 !! (nombre total de mes combobox)
Commenter la réponse de cs_guiguizeitzt
cs_guiguizeitzt 28 Messages postés samedi 3 mai 2008Date d'inscription 24 mars 2011 Dernière intervention - 13 mars 2011 à 12:22
0
Utile
Mais oui moi j'avais mis != 0

Ca fonctionne à merveille
Merci !!!

J'aurais peut être besoin d'un autre coup de main c'est pour modifier un fichier XML avec les valeur que je vais choisir dans les combobox
encore merci ca marche !!

Guiguizeitzt
Commenter la réponse de cs_guiguizeitzt

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.