Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 20 sur 20
  1. #1
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut Modifier plusieurs mêmes objets en une action

    Bonjour à tous,
    dans le but de simplifier mon code je cherche la méthode me permettant d'appliquer une actions à plusieurs objet en même temps sans devoir écrire une ligne de code pour chaque objet.
    Actuellement si je veux changer la couleur de police à mes 10 textBox je fais ces 10 lignes:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    this.Txt1.ForeColor = System.Drawing.Color.Black;
    this.Txt2.ForeColor = System.Drawing.Color.Black;
    this.Txt3.ForeColor = System.Drawing.Color.Black;
    this.Txt4.ForeColor = System.Drawing.Color.Black;
    this.Txt5.ForeColor = System.Drawing.Color.Black;
    this.Txt6.ForeColor = System.Drawing.Color.Black;
    this.Txt7.ForeColor = System.Drawing.Color.Black;
    this.Txt8.ForeColor = System.Drawing.Color.Black;
    this.Txt9.ForeColor = System.Drawing.Color.Black;
    this.Txt10.ForeColor = System.Drawing.Color.Black;
    J'ai pris cet exemple simple mais c'est valable pour d'autres objets, comment faire pour utiliser le chiffre du nom de l'objet (ex Txt1) dans une boucle?
    Merci de votre aide,
    bonne journée!!

  2. #2
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    Si c'est tout tes textbox qui doivent changer de couleur. Tu peux parcourir la liste des controles de la form et tester si ce sont des TextBox.
    ou alors tu peux jouer avec la propriété tag
    ou encore faire un List<Control> que tu initialises au début avec les controles necessaires
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  3. #3
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Bonjour BenoitM,
    merci pour cette réponse rapide, l'idée de la liste me plait bien mais peux tu m'en dire plus sur la proprieté "Tag" ou me poster un petit exemple avec la propriété "Tag" histoire de me mettre le pied à l'étrier...
    Merci d'avance.

  4. #4
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    Tag est une propriété de type string de Control. Donc tous les dérivés de control ont cette propriété.
    Tu peux par exemple via le designer y mettre : "ToChangeColor"
    et puis faire
    Code :
    1
    2
    3
    4
    5
     
    for each Control c in this.Controls
    {
    if (c.Tag == "ToChangeColor") c.ForeColor = Black
    }
    L'avantage ce que tu peux le faire via le designer.
    Initialiser une List<Control> a l'avantage d'être plus rapide (tu ne parcoureras que les controls necessaire et non tout les controls de la form)
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  5. #5
    Membre chevronné
    Homme Profil pro Emmanuel Bastien
    Développeur .Net / Delphi et UniPaas-XPA
    Inscrit en
    juillet 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Nom : Homme Emmanuel Bastien
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi et UniPaas-XPA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2002
    Messages : 298
    Points : 679
    Points
    679

    Par défaut

    Bonjour,
    Juste une petite précision, la propriété Tag n'est pas un type string mais Object. On peut donc y assigner n'importe quoi. C'est en mode Design qu'il n'est possible d'y assigner qu'une string...
    eb.

  6. #6
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    Ah oui autant pour moi
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  7. #7
    Expert Confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    juillet 2006
    Messages
    3 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 019
    Points : 2 869
    Points
    2 869

    Par défaut

    Histoire d'être complet, voici en utilisant une boucle
    (c'est en vb mais tu peux traduire le code ici)

    Ici, on change la couleur de fond de TOUTES les TextBox présent sur le formulaire (attention, je crois que si un textbox se trouve dans un autre conteneur (une GroupBox par exemple), elle sera pas prise en compte dans la boucle).
    Code :
    1
    2
    3
    4
     
    For Each ctl as TextBox in Me.Controls.OfType(Of TextBox)
        ctl.BackColor = Color.Black
    Next
    Ici, on change la couleur d'une série de TextBox bien précises (même remarque quant au conteneur)
    Code :
    1
    2
    3
    4
     
    For i as Integer = 0 to 9
       DirectCast(Me.Controls("Txt" & i.ToString),TextBox).BackColor = Color.Black
    Next
    (sous réserver de légères de syntaxe car je fais ça de tête pas dans VS)

    Comme ça, tu as toutes (y en a sûrement encore d'autres mais disons les plus courantes) les options à ta disposition.
    Kropernic (anciennement Griftou).

  8. #8
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut



    Merci à tous pour votre aide je retiens vos méthodes, j'ai abandonné l'idée de faire avec une list d'objet car bien que cela fonctionne pour les couleurs c'est plus compliqué lorsqu'il s'agit de BorderStyle.
    Je me penche sur la solution de Kropernic qui est selon moi la plus rapide et la plus simple mais je n'arrive pas à l’implémenter correctement, le compilo me remonte cette erreur:
    Erreur 1 Un membre 'System.Windows.Forms.Control.Controls' ne pouvant pas être appelé ne peut pas être utilisé comme une méthode.

    Code :
    ((TextBox)this.Controls("Txt" + i.ToString())).BackColor = Color.Black;

  9. #9
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    Code :
    ((TextBox)this.Controls["Txt" + i.ToString()]).BackColor = Color.Black;
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  10. #10
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Citation Envoyé par BenoitM Voir le message
    Code :
    ((TextBox)this.Controls["Txt" + i.ToString()]).BackColor = Color.Black;
    Ok, ça fonctionne avec un textBox, j'ai tenté avec un Label simplement hors de ma boucle mais impossible ?? ce sont pourtant bien 2 objets similaires??

    Code :
    ((Label)this.Controls["Label" + "1"]).ForeColor = System.Drawing.Color.Blue;
    La référence d'objet n'est pas définie à une instance d'un objet.

  11. #11
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    C'est que "Label1" n'existe pas dans ta form

    sinon
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    List<Control> mesControlsAModifier = new List<Control>();
    mesControlsAModifier.Add(txtbox1);
    mesControlsAModifier.Add(label1);
     
    foreach (Control control in mesControlsAModifier)
                {
                    if (control is TextBox)
                    {
                        ((TextBox)control).BackColor = Color.Black;
                    }
                    else if (control is Label)
                    {
                        ((Label)control).ForeColor = System.Drawing.Color.Blue;
                    }
                }
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  12. #12
    Expert Confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    juillet 2006
    Messages
    3 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 019
    Points : 2 869
    Points
    2 869

    Par défaut


    Ton label se nomme-t-il bien "Label1" ?


    Ton label se trouve-t-il bien directement dans l'objet Form ?
    En effet, s'il est contenu par un GroupBox ou un Panel par exemple, il se trouve alors dans la collection de contrôles du GroupBox ou du Panel. Par conséquent, en cherchant dans les contrôles du Form, tu obtiens une erreur.
    Kropernic (anciennement Griftou).

  13. #13
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    si c'est le cas 2 tu as une option tu as
    Code :
    this.Controls.Find("toto",true);
    je te laisse regarder comment ca marche dans la doc
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  14. #14
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Au moins je ne trahi pas le préfixe du titre "Débutant" !!

    Mon Label est bien dans un GroupBox, j'ai modifié ça fonctionne parfaitement !!
    Merci pour votre patience et vos explications, j'ai beaucoup appris sur le coup !!!

  15. #15
    Expert Confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    juillet 2006
    Messages
    3 019
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 019
    Points : 2 869
    Points
    2 869

    Par défaut

    C'est à ça que sert la communauté !

    Après toutes les fois où elle m'est venue en aide, il est normal que j'aide à mon tour
    Kropernic (anciennement Griftou).

  16. #16
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Bonjour,
    je déterre le sujet car je bloque pour un la même chose mais avec des Bitmap,
    es ce possible?
    Merci pour vos réponses.

    Code :
    1
    2
    3
    int PicIndex;
    ((Bitmap)this.????["Pic" + PicIndex]) = PicDrag;

  17. #17
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    le bitmap il est contenu dans quoi?

    une pictureBox?
    c'est quoi PicDrag?
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

  18. #18
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Citation Envoyé par BenoitM Voir le message
    le bitmap il est contenu dans quoi?

    une pictureBox?
    c'est quoi PicDrag?
    Bonsoir BenoitM,
    ces Bitmap (PicDrag , Pic1, Pic2, Pic3, Pic4, etc..) sont déclarés en global,
    ils ne sont pas dans des conteneurs ou autre objet.

    Code :
    ((Bitmap)this.????["Pic" + PicDragIndex.ToString()]) = PicDrag;
    En fait dans un drag & drop je récupère une image dans un Bitmap (Picdrag) pour le restaurer par la suite dans Pic1, pic2, .... en fonction d'un index(PicIndex).
    Un truc compliqué de débutant quoi ..!!!

  19. #19
    Nouveau Membre du Club
    Inscrit en
    décembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : décembre 2007
    Messages : 254
    Points : 25
    Points
    25

    Par défaut

    Ce n'est donc pas possible pour les variables ou autres objets que les controls?

  20. #20
    Expert Confirmé
    Homme Profil pro Benoît
    Inscrit en
    février 2003
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Nom : Homme Benoît
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : février 2003
    Messages : 1 733
    Points : 2 877
    Points
    2 877

    Par défaut

    alors il faut creer un Dictionnary<string,bitmap>
    Je ne suis qu'un pauvre débutant alors ne frappez pas si mes idées ne sont pas bonnes

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •