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 :

Construction d'un nom de variable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut Construction d'un nom de variable
    Bonjour,
    Comme l'indique l'intitulé, j'aimerais construire le nom d'une variable pour la traiter. Exemple:

    J'ai 3 Textbox qui se nomme: jour_1_txt; jour_2_txt; jour_3_txt

    Dans une boucle for, j'aimerais automatiser l'affectation d'une valeur.
    Voici mon idée (qui est complètement fausse):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
    jour_ + i + _txt.Text = "Bonjour";
    }
    Vous avez des solutions? Merci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ce n'est pas faisable aussi facilement. La meilleure solution reste de passer par un Dictionary<TKey, TValue>. Voici un exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var dico = new Dictionary<string, string>();
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        dico.Add("jour_" + i.ToString() + "_txt", "Bonjour");
    }
    Ensuite tu peux affecter le résulat comme ça par exemple :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (var ctrl in Page.Controls)
    {
        if (ctrl is TextBox)
        {
            var textBox = (TextBox)ctrl;
            if (dico.Keys.Contains(textBox.ID))
            {
                textBox.Text = dico[textBox.ID];
            }
        }
    }
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Bonjour,

    Je pense que Control.FindControl devrait répondre à votre besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var textbox = Controls.Find(string.Format("jour_{0}_txt", i), true).OfType<TextBox>().FirstOrDefault();
          if (textbox != null) textbox.Text = "Bonjour";
    Sachant que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Controls.Find(string.Format("jour_{0}_txt", i), true)
    // => Chercher un cobntrôle selon son nom, et la valeur booléenne indique que l'on cherche aussi dans les contrôles enfants
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .OfType<TextBox>()
    // => De type TextBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .FirstOrDefault();
    //=> Prendre le premier résultat (puisque nous recevons un tableau), et si nous n'avons rien on retourne null

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Ah ouais... vous, vous êtes des bons, franchement! Merci

    Et si dans mon nom de variable j'ai deux variables: jour_1_2_txt ?
    Comment pourrais-je intégrer une deuxième boucle?

    Merci encore..

  5. #5
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Je viens de mettre à jour mon post dont le code était incorrect.

    Pour info, la solution de DotNetMatt est pour ASP.NET, et la mienne est pour Windows Form.

    Et si dans mon nom de variable j'ai deux variables: jour_1_2_txt ?
    Comment pourrais-je intégrer une deuxième boucle?
    Pour Windows Form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        for (int j = 0; j < 10/*TODO: ???*/; j++)
        {
            var textbox = Controls.Find(string.Format("jour_{0}_{1}_txt", i,j), true).OfType<TextBox>().FirstOrDefault();
            if (textbox != null) textbox.Text = "Bonjour";
        }
    }

  6. #6
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Etanne Voir le message
    Pour info, la solution de DotNetMatt est pour ASP.NET, et la mienne est pour Windows Form.
    Oui bien vu, je n'avais pas fait attention qu'on n'était pas dans le forum ASP.NET
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  7. #7
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 298
    Par défaut
    Votre solution est top! Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/05/2005, 22h29
  2. Nom de variable dans une autre variable
    Par lsdInside dans le forum Linux
    Réponses: 5
    Dernier message: 04/12/2004, 19h36
  3. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  4. Nom de variable
    Par lilia dans le forum Flash
    Réponses: 4
    Dernier message: 07/08/2004, 13h11
  5. Generer des noms de variables avec une boucle
    Par moutanakid dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/07/2004, 17h45

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