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 :

Inserer une variable dans le nom d'un contrôle ?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut Inserer une variable dans le nom d'un contrôle ?
    Bonjour existe t'il un moyen d'inserer une variable dans le nom d'un contrôle, contenu dans une boucle dans mon cas, je voudrais réussir a faire fonctionner ceci en gros :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    picturebox[Var]1.Visible = True;
    j'ai tenter plus haut de ruser via ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Control pb = picturebox +  var + 1;
    pour finir sur un

    mais il ne peut évidemment convertir implicitement un string en control, donc existe il un Control.Parse ou un truc du genre, ou tout autre solution pour arriver à faire fonctionner ceci?

    Merci !

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    bonjour, essaie ceci:

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PictureBox pb = this.GetControl(string.Format("PictureBox{0}1", maVariable)) as PictureBox;
     
        if (pb != null) {
            //...
        }
    (J'ai plus l'habitude de VB donc c'est peut-être pas juste à 100%)

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Cela ne fonctionne malheureusement pas et suis toujours a la recherche d'idée ou de moyens

    en attendant ben j'ai tout mis a la suite à la sortie de mon tableau donc c est vilain et long

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Et ça, ça ne marche pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Control pb = this.Controls["picturebox" +  var + "1"];

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    Cela ne me met pas d'erreur dans le code mais quand je lance le programme et fait appel à ceci ca plante en me disant l'erreur ci dessous , mais je continue a creuser dans ce sens ca à l'air pas mal.

    Object reference not set to an instance of an object.

  6. #6
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Si ça survient sur ta ligne pb.Visible = true, cela veut dire qu'il n'arrive pas à trouver le contrôle correspondant au nom que tu lui a donnée.

    Fais un test if(pb != null) avant de modifier ses propriétés.

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    avec ce if rien ne se passe, mais pas d'erreurs du coup.. ^^, j'ai essayer de créer un label et lancer un petit

    histoire de voir si ca n'allait pas afficher ce qu'il comprends, aka du coup le dernier chiffre de ma boucle on est d'accord genre pb201 .. mais non il affiche rien, enfin juste le vide...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    Pourquoi ne pas utiliser un tableau qui contiendrait tes picture box?

    Cela t'éviterait d'utiliser des mécanismes plus lents (recherche du contrôle) et te simplifierait la vie

    Si tu déclare juste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private PictureBox[] pctBoxArray = new PictureBox[??];
    ça devrait répondre à ton problème non?

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    en fait j'ai 3 "couches" d'images le tout dans une boucle X

    l'idée était qu'à chaque itération if bla then visible ou pas =) et cela pour les trois couches

    du coup j'ai contourner car j'ai un tableau renseigner plus haut pour un autre affichage du coup je lis le tableau et note une commande pour chaque picturebox donc j'ai un peu souffert mais ca marche...

    je doit partir donc j'ai réfléchis que peu a ta solution mais je vais voir si c est adaptable

    Merci !

  10. #10
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    En fait, Controls est une collection des contrôles contenus dans la form, donc à priori pas besoin d'avoir un tableau en plus.

    Par contre, si tu n'arrive pas à récupérer tes contrôles, es-tu sûr de leur nom ?

    Comment les créer tu ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    effectivement d'accord avec toi laedit, mais l'indexation par chaîne de caractère a des chances d'être légèrement plus lente que l'indexation par entier, c'est pourquoi je parlais de méthode plus lente.

    De plus si les contrôles sont créés dynamiquement autant garder les références dans un tableau si on doit les parcourir par la suite...

  12. #12
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Citation Envoyé par pavicf Voir le message
    l'indexation par chaîne de caractère a des chances d'être légèrement plus lente que l'indexation par entier, c'est pourquoi je parlais de méthode plus lente.
    A ce niveau là, je ne pense pas que ça se verra.

    Et les références sont déjà dans la collection Controls, donc pas besoin de multiplier les tableaux de références

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    effectivement je ne pense pas non plus que ça se verra, juste une question d'habitude, j'évite toujours l'indexation par chaînes de caractère

    enfin j'aurais aussi évité d'avoir beaucoup de contrôles picture box dans une form, et j'aurais sûrement fait un usercontrol à la place... question de choix et de contraintes et chacun a les siens

  14. #14
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Angelssen Voir le message
    en fait j'ai 3 "couches" d'images le tout dans une boucle X

    l'idée était qu'à chaque itération if bla then visible ou pas =) et cela pour les trois couches

    du coup j'ai contourner car j'ai un tableau renseigner plus haut pour un autre affichage du coup je lis le tableau et note une commande pour chaque picturebox donc j'ai un peu souffert mais ca marche...

    je doit partir donc j'ai réfléchis que peu a ta solution mais je vais voir si c est adaptable

    Merci !
    Je ne sais pas si j'ai bien compris ton histoire de couches ^^ mais si l'idée et d'avoir plusieurs images dans plusieurs PictureBox et de rendre visible la bonne Image/PictureBox pourquoi ne passes-tu pas par un contrôle ImageList qui stocke toutes tes images (référencées aussi bien par index que par clef) et tu affectes à ton PictureBox la bonne image en fonction du contexte.

    À réfléchir peut-être, où j'ai mal compris le problème ^^

  15. #15
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 31
    Points : 20
    Points
    20
    Par défaut
    En fait pour ré expliquer plus simplement on va dire que par exemple j'ai 10 picturebox par couche sur 3 couches

    donc en gros
    pb00 pb01 pb02 -> couche 1
    pb10 pb11 pb12 -> couche 2
    .......................................
    pb90 pb91 pb92 -> couche 10

    A chaque itération ca passe en visible les éléments souhaites d ou l'idée plutôt que de tout taper (ce que j'ai fait au final via un tableau en fin de boucle)de remplacer le premier chiffre par ma variable i (j'avais nommé les pb en pensant pouvoir gagner du temps comme ca).

    Après le usercontrol en wpf j'ai tenter mais c'était un peu longuet et répétitif (sauf si je m y prends mal ) de déclarer la possibilité de modif la visibilité dans le code du usercontrol et ensuite de refaire du code dans le C# windowsform vu qu'au final mes images "carrés" m'allaient.

    Pour revenir au wpf si j'ai bien compris, ne le pratiquant pas du tout pour pouvoir modifier des images du user via la windowsform il faut faire ceci pour chaque image :

    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
         public void SetImageVisibility1(bool isVisible)
            {
                if (isVisible == true)
                {
                    this.image1.Visibility = Visibility.Visible;
                }
                else
                {
                    this.image1.Visibility = Visibility.Collapsed;
                }
            }
            public void SetImageVisibility2(bool isVisible)
            {
                if (isVisible == true)
                {
                    this.image2.Visibility = Visibility.Visible;
                }
                else
                {
                    this.image2.Visibility = Visibility.Collapsed;
                }
            }
    edit :

    et pour (re)tester l'histoire d'avant j'ai fait une modif toute bête et il ne trouve pas le control

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Control pbz = this.Controls["pb" + "0" + "1"];
    pbz.Visible = true;

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 31
    Points
    31
    Par défaut
    si tu place tes contrôles dynamiquement à partir du code, le plus simple à mon avis serait de faire un code de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    PictureBox [,] pboxes = new PictureBox[i, j];
     
    for (i = 0; i < ?; i++)
    {
        for (j = 0; j < ?; j++)
        {
            pboxes[i, j] = new PictureBox();
            /* tu fais tes initialisations ici */
        }
    }
    ensuite lorsque tu veux afficher ou cacher une image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pboxes[i, j].Visible = true; /* ou false */

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/05/2014, 16h09
  2. [XL-2003] Inserer une variable dans un nom de fichier Excel
    Par Zertozerto dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2011, 11h35
  3. Réponses: 8
    Dernier message: 26/03/2008, 20h05
  4. Réponses: 7
    Dernier message: 07/12/2007, 16h37
  5. inserer une variable dans une url
    Par elmoino dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/07/2006, 12h34

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