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 :

Avec un contrôle commun comme variable ..?


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Points : 84
    Points
    84
    Par défaut Avec un contrôle commun comme variable ..?
    Bonjour,

    voici mon problème, j'aimerais changer la valeur d'une prorgessbar parmis 4.

    ex :

    progbar1
    progbar2
    progbar3
    progbar4

    Et je veux changer leur valeur en faisant par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=1;i<5;i++)
    {
       progbar'i' +=5;
    }
    Avez vous une idée ?

    Merci bien
    Ben

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 641
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour,

    si j'ai bien compris , soit tu ajoutes manuellement tes ProgressBar dans une List , que tu itères en augmentant leur valeur ,

    soit tu automatises le tout en t'inspirant de ce bout de code :

    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
            List<ProgressBar> listBar = new List<ProgressBar>();
     
            // On récupère toute les ProgressBar de la Form
            private void GetProgressBar()
            {
                foreach (Control control in this.Controls)
                {
                    if (control.GetType() == typeof(ProgressBar))
                        listBar.Add((ProgressBar)control);
                }
     
            }
     
            // On les augmente toutes
            private void AugmenterProgressBar(value)
            {
                for (int i = 0; i < listBar.Count; i++)
                {
                    listBar[i].Value += value;
                }
            }
    A toi de voir si tu veux les insérer manuellement ou non dans la List.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour benobab,

    La solution de Romain est très bien à condition que :
    (1) Toutes des barres de progression se trouvent directement dans le formulaire et non pas dans un élément de regroupement
    (2) Toutes tes barres de progression sont concernées par le traitement.

    Pour (1) : Si tu met une barre de progression dans un Panel ou un TableLayoutPanel, l'algorithme de Romain va les zapper car ils figurent dans la collection "Controls" de l'élément de regroupement et non pas dans la collection "Controls" du formulaire.
    Pour (2) : Si tu ajoutes d'autres barres de progression directement dans le formulaire, elles subiront le même traitement. Peut-être que c'est ce que tu veux... mais peut-être pas.

    Ce que j'aurais fait à ta place, c'est dans le constructeur de ton formulaire de remplir la liste de ProgressBar avec ceux que tu veux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public MaForm()
    {
        listBar.AddRange(new ProgressBar[] { progbar1, progbar2, progbar3, progbar4 });
    }
    en reprenant la liste "listBar" de Romain.

    Puis ensuite tu réutilises exactement la méthode "AugmenterProgressBar" que Romain t'a montré.

  4. #4
    Membre régulier
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Points : 84
    Points
    84
    Par défaut
    Oui effectivement ça va me permettre de faire pas mal de chose, une autre question, si je veux un nombre i, rentré par l'utilisateur, je ne peux pas comparer avec autre chose, par exemple le nom de mes progressbar -> qui me permettrait de choisir seulement certaines progressbar'i'.


    En fait je me suis mal exprimé, j'ai nommé mes progressbar avec un numéro à la fin pour les distinguer -> et j'aimerais augmenter leurs valeurs, mais seulement de certaines, y'a-t-il un moyen de les distinguer via leurs noms ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    En effet, les éléments d'un formulaire Windows ont un nom stocké dans sa propriété "Name".
    Cela dit, à ta place, au lieu d'aller parser le nom du progress bar, j'aurais continué avec la liste et ainsi, grâce à la liste tu peux faire rentrer un indice par l'utilisateur et ça va correspondre exactement à l'indice dans la liste "listBar" et elles se distingueront ainsi par leur indice.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int _indiceUtilisateur;
     
    //Initialisation de _indiceUtilisateur comme tu veux...
    ...
     
    //Accès à la barre de progression voulue :
    listBar[_indiceUtilisateur].Value += 5;
    Après s'il y a plusieurs indices à choisir, tu peux par exemple les stocker dans une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    List<int> indicesUser = new List<int>();
     
    //Initialisation de la liste comme tu veux...
    ...
     
    //Accès :
    for(int i = 0 ; i < listBar.Count ; i++)
    {
       if (indicesUser.Contains(i))
          listBar[i].Value += value;
    }
    Qu'en penses-tu?

    Après là je montre du code connu de tous mais personnellement j'aurais même fait une petite requête Linq...

  6. #6
    Membre régulier
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Points : 84
    Points
    84
    Par défaut
    Ok je vais faire comme ça, merci beaucoup

  7. #7
    Membre régulier
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Points : 84
    Points
    84
    Par défaut
    Citation Envoyé par PixelJuice Voir le message
    Bonjour,

    si j'ai bien compris , soit tu ajoutes manuellement tes ProgressBar dans une List , que tu itères en augmentant leur valeur ,

    soit tu automatises le tout en t'inspirant de ce bout de code :

    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
            List<ProgressBar> listBar = new List<ProgressBar>();
    
            // On récupère toute les ProgressBar de la Form
            private void GetProgressBar()
            {
                foreach (Control control in this.Controls)
                {
                    if (control.GetType() == typeof(ProgressBar))
                        listBar.Add((ProgressBar)control);
                }
    
            }
    
            // On les augmente toutes
            private void AugmenterProgressBar(value)
            {
                for (int i = 0; i < listBar.Count; i++)
                {
                    listBar[i].Value += value;
                }
            }
    A vrai dire, j'ai testé, et cette partie en gras ne fonctionne pas, car il y a cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.Label' en type 'System.Windows.Forms.ProgressBar'.
    Saurais - tu à quoi cela est dû ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour benobab,

    Ce que tu nous rapportes ça m'intrigue... Je ne vois pas comment un ProgressBar pourrait être aussi un Label...
    Peux-tu nous faire un copier/coller du code que tu as adapté?

  9. #9
    Membre régulier
    Homme Profil pro
    Apprenti Ingénieur Informatique
    Inscrit en
    Octobre 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprenti Ingénieur Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 82
    Points : 84
    Points
    84
    Par défaut
    Désolé, fausse manip de ma part je pense car en écrivant cela (et en mettant des index Tab à chacune de mes progressbar ) ça fonctionne correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<ProgressBar> pgbar = new List<ProgressBar>();
    pgbar.AddRange( new ProgressBar[] { null,progressBar1,progressBar2,progressBar3,progressBar4,progressBar5,progressBar6});
    int z;
    //Blablabla
                                    int.TryParse(temp, out z); //on passe y en int pour l'index de la progressBar
                                    pgbar[z].Invoke(new Action(() => { pgbar[z].Value += 20; }));
    Voila
    Le Invoke new Action ... c'est parce que je travail en multithread !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/09/2019, 23h16
  2. boucle for avec des feuille comme variable
    Par eden3 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 25/06/2015, 13h39
  3. Réponses: 1
    Dernier message: 24/07/2012, 09h19
  4. Réponses: 5
    Dernier message: 25/05/2012, 10h41
  5. [VBA-E]Recherche d'une valeur avec la colonne comme variable
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/04/2007, 09h21

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