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

Windows Forms Discussion :

Modifier plusieurs mêmes objets en une action [Débutant]


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ((TextBox)this.Controls("Txt" + i.ToString())).BackColor = Color.Black;

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((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
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ((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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    C'est que "Label1" n'existe pas dans ta form

    sinon
    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
    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 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    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

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    Par défaut
    si c'est le cas 2 tu as une option tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    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

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int PicIndex;
    ((Bitmap)this.????["Pic" + PicIndex]) = PicDrag;

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    ((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
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 254
    Points : 55
    Points
    55
    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
    Inscrit en
    Février 2003
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 177
    Points : 4 489
    Points
    4 489
    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.

Discussions similaires

  1. Passer un objet d'une action à une autre
    Par mattheox dans le forum Struts 1
    Réponses: 3
    Dernier message: 09/01/2008, 22h51
  2. [POO] passer un objet javascript à une action Struts
    Par abriotde dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/07/2007, 16h20
  3. Réponses: 6
    Dernier message: 05/08/2006, 10h54
  4. [MySQL] Plusieurs même requetes sur une même table
    Par bibom dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 27/07/2006, 12h54
  5. Réponses: 3
    Dernier message: 30/07/2004, 10h51

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