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 :

Concaténer un nom d'objet


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut Concaténer un nom d'objet
    Bonjour,

    je souhaite créer dynamiquement des textBox dans mon formulaire mais je n'arrive pas à donner un donner à mon objet en utilisant la concaténation d'une string "ingredient" et d'un chiffre incrémental i.
    Le code utilisé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Forms.TextBox textBoxIngredient = new System.Windows.Forms.TextBox();
    où j'aimerais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textBoxIngredient = "ingredient"+i
    avec i un entier issu de ma boucle for

    Merci de votre aide
    Mes contributions phares en dev : www.rigaudie.fr

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    textbox.Name = "tortoeiu" + i.ToString();
    non ?
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.Windows.Forms.TextBox textBoxIngredient = new System.Windows.Forms.TextBox();
    textBoxIngredient = "tortoeiu" + i.ToString();
    Microsoft Visual Studio me sort
    Erreur 1 Impossible de convertir implicitement le type 'string' en 'System.Windows.Forms.TextBox' C:\Documents and Settings\Administrateur\Bureau\Exo C# graphique\Jour4\Exo5\Exo5\Form1.cs 83 21 Exo5
    Mes contributions phares en dev : www.rigaudie.fr

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Attention tu as oublié le .Name :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    textBoxIngredient.Name = "tortoeiu" + i.ToString();

  5. #5
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    En faite mon code est
    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
    private void numericUpDownIngredients_ValueChanged(object sender, EventArgs e)
            {          
                System.Windows.Forms.TextBox[] TabTextBox = new System.Windows.Forms.TextBox[30];
     
                int NbIngredients =Convert.ToInt32(numericUpDownIngredients.Value);
     
                for (int i = 0; i < NbIngredients; i++)
                {
                    //création dynamique des éléments
                    System.Windows.Forms.TextBox textBoxIngredient = new System.Windows.Forms.TextBox();
     
                   TabTextBox[0] = textBoxIngredient ;
     
                    TabTextBox[i].Location = new System.Drawing.Point(15, 50);
                    TabTextBox[i].Name = "textBoxIngredient" + i;
                    TabTextBox[i].Size = new System.Drawing.Size(126, 20);
                    groupBoxIngredients.Controls.Add(TabTextBox[i]);
     
                }
     
            }
    L'idée est d'affecté dans mon TabTextBox[i] le nom de mon objet en fonction de l'increment i de la façon suivante : "ingredient"+i (surtout que je dois mettre une vingtaine de textbox)
    Car je n'ai pas envi de faire cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.Windows.Forms.TextBox textBoxIngredient1 = new System.Windows.Forms.TextBox();
    System.Windows.Forms.TextBox textBoxIngredient2 = new System.Windows.Forms.TextBox();
    System.Windows.Forms.TextBox textBoxIngredient3 = new System.Windows.Forms.TextBox();
    ...
    Avez-vous une idée à me proposer ?

    Merci
    Mes contributions phares en dev : www.rigaudie.fr

  6. #6
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    nos messages se sont croisés !!!!
    Attention tu as oublié le .Name :
    tu veux dire que je garde le même objet textBoxIngredient mais à chaque boucle je lui affecte un "name" différents ? Mais dans ce cas je ne créé pas plusieurs objet ?
    Mes contributions phares en dev : www.rigaudie.fr

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par Général03 Voir le message
    nos messages se sont croisés !!!!

    tu veux dire que je garde le même objet textBoxIngredient mais à chaque boucle je lui affecte un "name" différents ? Mais dans ce cas je ne créé pas plusieurs objet ?
    Ben non, tu en résinstancie un nouveau à chaque fois.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  8. #8
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Donc je reviens au même problème, je ne vais pas faire cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.Windows.Forms.TextBox textBoxIngredient1 = new System.Windows.Forms.TextBox();
    System.Windows.Forms.TextBox textBoxIngredient2 = new System.Windows.Forms.TextBox();
    System.Windows.Forms.TextBox textBoxIngredient3 = new System.Windows.Forms.TextBox();
    ...
    J'aimerais concaténer deux chaines pour l'affecter à mon objet TabTextBox (qui représenterait tous mes objets textBox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabTextBox[0] = textBoxIngredient + i ;
    Comment puis-je faire ?

    Merci de votre aide
    Mes contributions phares en dev : www.rigaudie.fr

  9. #9
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Dans un langage comme C#, le nom des variables n'a aucun sens au runtime.

    Donc, ton code devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                int NbIngredients =Convert.ToInt32(numericUpDownIngredients.Value);
                TextBox[] TabTextBox = new TextBox[NbIngredients]; 
     
                for (int i = 0; i < NbIngredients; i++)
                {
                   TabTextBox[i] = new TextBox();
     
                    TabTextBox[i].Location = new System.Drawing.Point(15, 50);
                    TabTextBox[i].Name = "textBoxIngredient" + i;
                    TabTextBox[i].Size = new System.Drawing.Size(126, 20);
                    groupBoxIngredients.Controls.Add(TabTextBox[i]);           
                }
    ಠ_ಠ

  10. #10
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Nickel ca fonctionne, merci beaucoup Guulh
    Pourrais tu m'apporter qq infos supplémentaires quand tu dis
    Dans un langage comme C#, le nom des variables n'a aucun sens au runtime.
    Pourquoi cette différence par rapport à d'autres langages ??

    Merci
    Mes contributions phares en dev : www.rigaudie.fr

  11. #11
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par Général03 Voir le message
    Pourquoi cette différence par rapport à d'autres langages ??
    C'est loin de lui etre propre : C, C++, java sont pareil.

    Le truc, c'est de bien distinguer objets et references. Quand tu ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TextBox t = new TextBox();
    TextBox tbis = t;
    unTableau[12] = t; // où unTableau est un tableau de textbox
    Ce que tu fais, c'est creer un objet, une instance de la classe TextBox (avec le new) ; puis lier une référence, que tu as appelée "t", a cette instance.
    Ensuite, tu crees une autre reference tbis, qui va referencer ce même objet.
    Ensuite, tu indiques qu'un element de ton tableau va referencer cette meme instance.

    Donc tu vois, un objet n'a pas vraiment de nom. Il peut etre référencé par une variable, notamment a sa creation : mais "t" n'est pas l'objet. L'objet ne s'appelle pas "t".

    Dans ce contexte, donner un nom dynamique a une variable n'a pas de sens.
    ಠ_ಠ

  12. #12
    Membre actif Avatar de Général03
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 848
    Points : 283
    Points
    283
    Par défaut
    Merci pour tes renseignements supplémentaires et merci pour ton bout de code qui m'a bien dépanné.
    Mes contributions phares en dev : www.rigaudie.fr

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

Discussions similaires

  1. [DisplayTag] Error looking up property "nom" in objet type "mysample.Personne"
    Par slyv dans le forum Taglibs
    Réponses: 3
    Dernier message: 02/03/2011, 17h53
  2. [VBSCRIPT] concaténer 2 noms de variable
    Par wil4linux dans le forum ASP
    Réponses: 4
    Dernier message: 28/02/2006, 13h22
  3. frames et javascript - parametrage d'un nom d'objet
    Par titicurio dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/02/2006, 13h35
  4. Nom d'Objet Invalide
    Par etiennegaloup dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 15/11/2004, 09h17
  5. Réponses: 11
    Dernier message: 16/10/2004, 18h14

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