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 :

Récupérer une variable en fabriquant son nom à partir d'un String


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut Récupérer une variable en fabriquant son nom à partir d'un String
    Bonjour,

    J'ai une liste de variables de type TextBox que j'aimerai récupérer afin d'utiliser leur attribut ".Text".

    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
    23
    24
    25
    26
    27
    28
    29
    //Déclarés et utilisés dans Form1 :
    TextBox textBoxIPCE1;
    TextBox textBoxIPCE2;
    TextBox textBoxIPCE2;
    TextBox textBoxPortCE1;
    TextBox textBoxPortCE2;
    TextBox textBoxPortCE2;
    TextBox textBoxIPAE1;
    TextBox textBoxIPAE2;
    TextBox textBoxIPAE3;
    TextBox textBoxPortAE1;
    TextBox textBoxPortAE2;
    TextBox textBoxPortAE3;
    //...
     
    //Form2 :
    String ip = null, port = null;
    String choix = soit "ce" soit "ae";
     
    for(int i = 1; i<4; i++)
    {
         ip = "textBoxIP" + choix + i;
         port = "textBoxPort" + choix + i;
     
    Identifications magiques de String ip et String port vers les TextBox ip et TextBox port correspondant !
     
         Console.WriteLine(ip.Text + ":" + port.Text);
     
    }
    Vous saisissez mon problème ?
    Si vous pouviez m'aider je vous en serai grandement reconnaissant !
    Merci

  2. #2
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Tu dois instancier tes textBox et faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TextBox textbox =new TextBox();
    //.....
    textbox.Name = "textBoxIP" + ...;
    textbox.Text = "TaValeur";
    N'oubliez pas le tag et

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    Mais justement les textBox que je veux récupérer existent déjà et ont déjà des propriétés Name et Text remplies.

  4. #4
    Membre habitué Avatar de Zeckard
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2012
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 108
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Tes TextBox ont été posés avec le designer ?
    Si oui, pour y avoir accès de n'importe où, tu as dans les propriétés une variable qui s'appelle 'Modifiers'.

    Mets cette dernière en public et tu pourras ensuite faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.textBoxIPCE1.Text = "blabla"

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    En fait mon problème n'est pas d'accéder à ces textbox.
    J'aurai pu remplacer "TextBox" par n'importe quel autre type de variable.

    Le problème c'est de créer une chaîne de caractères qui contient le nom de la variable que je veux récupérer, et faire comprendre au programme que je veux accéder à cette variable.

    Voici un autre exemple plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int maVariableInt = 2;
    String nomDeVariable = "maVariableInt";
     
    INSTRUCTION(Faire comprendre au programme que le String nomDeVariable renvoie à l'objet maVariableInt.)

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    C'est le même genre de problème qu'ici : Nom d'une variable dans une string.
    Sauf que la solution d'utiliser le GetField du type Type ne m'aide pas.

  7. #7
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Citation Envoyé par Sphaxounet Voir le message
    Le problème c'est de créer une chaîne de caractères qui contient le nom de la variable que je veux récupérer, et faire comprendre au programme que je veux accéder à cette variable.

    Voici un autre exemple plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int maVariableInt = 2;
    String nomDeVariable = "maVariableInt";
     
    INSTRUCTION(Faire comprendre au programme que le String nomDeVariable renvoie à l'objet maVariableInt.)
    Ajouté au fait que feras plus tard:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(ip.Text + ":" + port.Text);
    , je crois que tu peux passer une méthode générique ou un dictionnaire pour stocker tes informations sur les textbox:
    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
    Dictionary<string, string> dictionnaryOfTextBox = new Dictionary<string, string>(); 
     
               foreach (Control c in this.Controls)
               {
                   if (c is TextBox)
                   {
                       dictionnaryOfTextBox.Add(((TextBox)c).Name, ((TextBox)c).Text);
                   }
     
               }
     
               List<KeyValuePair<string, string>> listTxtBox = dictionnaryOfTextBox.ToList();
     
                foreach (KeyValuePair<string, string> pair in listTxtBox)
                {
                    MessageBox.Show(string.Format("{0} : {1}", pair.Key, pair.Value));
                }
    Maintenant, il te suffira de créer ta chaîne de caractères contenant le nom de la variable et via LINQ, faire un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       string macle = dictionnaryOfTextBox.Single(m => m.Key == "textBoxIPCE1").Value;
     
       MessageBox.Show("Valeur chaîne créée : " + macle);
    N'oubliez pas le tag et

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Tu utilises un dictionnaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                Dictionary<string, TextBox> oDico = new Dictionary<string, TextBox>();
                oDico.Add("textBoxIPCE1", textBoxIPCE1);
     
                // utilisation 
                oDico["textBoxIPCE1"].Text = "coucou";
    Ainsi tu peux directement manipuler le textbox.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(oDico["textBoxIPCE1"].Text);
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  9. #9
    Membre expérimenté Avatar de callo
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 887
    Points : 1 699
    Points
    1 699
    Par défaut
    Wao! Super la méthode de rv26t. Bien qu'ayant suggérer l'utilisation d'un dictionnaire, je n'avais pas pensé à un
    Dictionary<string, TextBox>
    . Très pratique en effet pour manipuler directement les textbox.
    N'oubliez pas le tag et

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    A oui super ! C'est ce dont j'avais besoin.
    Par contre ça m'oblige à initialiser le "dictionnaire" à la main quand même.

    Ca m'arrive souvent en C# ou en Java d'avoir à récupérer un objet de cette façon, alors il faudrait peut-être que je songe à me faire une classe qui ferait ça automatiquement.

    Merci de votre aide en tout cas, je teste ça lundi.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 44
    Points : 42
    Points
    42
    Par défaut
    A mais t'avais pensé à tout, avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach (Control c in this.Controls)
               {
                   if (c is TextBox)
    }
    Je suis tranquille !
    Merci beaucoup à vous 2, sujet résolu !

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

Discussions similaires

  1. [AC-2000] Faire référence à une variable en construisant son nom
    Par ClaudeLELOUP dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/10/2010, 21h29
  2. Utiliser contenu d'une variable et pas son nom..
    Par ehochedez dans le forum Langage
    Réponses: 3
    Dernier message: 03/09/2009, 11h19
  3. Réponses: 6
    Dernier message: 19/01/2009, 12h57
  4. Réponses: 7
    Dernier message: 11/12/2008, 18h45

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