[C#] Probleme : Variable + Nom d'objet [Résolu]

Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
- - Dernière réponse : Mentalalex
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
- 9 oct. 2008 à 15:49
Bonjour a tous,

Jai un petit soucis en ce moment, en effet j'aimerais bien modifier le "Text" de plusieurs bouton dynamiquement grace a un for et un dataset, mais ca ne fonctionne pas : Apres plusieurs recherche, j'ai souvent entendu parler de "reflexion" qui me permetterais de recuperer le nom de l'objet et de le modifier, mais sans reussite :(

Voic le code :



int z;
for (z; z<7; z++)
{Favori_+z.Text Fav+z ds.Tables["favori"+z].Rows[0].ToString();
}



Merci d'avance !
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
3
Merci
Bonjour,

Si tu travailles sur un projet WinForm (application Windows), tu peux accéder à tous tes contrôles (et les boutons par la même occasion) comme ceci:

int z;
for (z; z<7; z++)
{
string btnName = string.Concat("Favori_", z);
this.Controls[btnName].Text = ds.Tables["favori"+z].Rows[0].ToString();
}

Vérifies quand même tout d'abord que this.Controls[btnName] est différent de null ^^ (sinon, il n'existe pas).

Bon courage,


Billou_13

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 87 internautes nous ont dit merci ce mois-ci

Commenter la réponse de billou_13
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
0
Merci
Précision quand au remplisage du dataset dans la meme boucle

                SQL = "SELECT nom_produit, id_fav FROM produits WHERE id_fav='" + z + "'";
                OleDbCommand cmd = new OleDbCommand(SQL, con);
                OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
                DataSet ds = new DataSet();
                adp.Fill(ds, "favori" + z);

La connexion etant initialisé ailleurs et fonctionnant

Merci
Commenter la réponse de Mentalalex
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
0
Merci
Merci beaucoup, pour la fonction Concat, que je ne connaisais pas !
Par ailleurs, au niveau de

      if (btnName != null)
                {
                    this.Controls[btnName].Text = ds.Tables["favori" + z.ToString()].Rows[0].ToString();
                }

J'ai ce message : " La reference d'objet n'est pas definit a une instance d'un objet "

Une idée ? :(

Merci d'avance
Commenter la réponse de Mentalalex
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
Re,

Le test "btnName != null" est inutile car il retourne toujours vrai.
btnName = string.Concat("Favori_", z); //qui retourne forcément Favori_ + quelque chose.

Le test dont je te parlais est: if(this.Controls[btnName] != null)
Ce test permet de t'assurer que le bouton existe.

Pour ton erreur, elle peut donc venir de:
- le bouton n'existe pas (il faudra donc regarder pourquoi)
- La table ou la ligne de la table dans : ds.Tables["favori" + z.ToString()].Rows[0] n'existe pas non plus.

A toi d'analyser tout ça ^^


Billou_13
Commenter la réponse de billou_13
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
0
Merci
J'ai analysé tout ca !

Pour verifier que  ce n'etait pas du a la ligne de la table qui n'existait pas, j'ai enlevé ca, et je l'ai remplacé par
z.ToString(); pour afficher sur le bouton, juste son Numéro
et j'ai rajouté la condition que vous avez dis !
Au final j'ai donc :

    if (this.Controls[btnName] != null)
                    {
                        this.Controls[btnName].Text = z.ToString();
                    }
Avant le if, un MessageBox.Show(btnName); renvoi bien Favori_1,Favori_2,...,Favori_6 !
Si je met le msgbox dans la condition, rien ne se produit !

J'en conclu que pour VS2k5, mon bouton n'existe pas, donc il ne peux pas le renommer...

Je suis dans une impasse etant donné que mes boutons portent bien ces noms...
Commenter la réponse de Mentalalex
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
Alors là, je ne vois pas ^^

As-tu essayer de passer en mode pas à pas.
Vérifie la valeur (avec l'espion en mode pas à pas) de this.Controls[btnName].
Cela te retourne-t-il bien le bouton en question ???

Si ce n'est pas le cas, executes-tu le code sur la form qui contient les boutons ??? car le "this" renvoi la form courante.

Bon courage,


Billou_13
Commenter la réponse de billou_13
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
0
Merci
Oui j'execute le code sur la meme form, sinon j'aurais remplacé le this ;)
Je vais posé un espion pour voir...

Je te tiens au courant
MERCI
Commenter la réponse de Mentalalex
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
88
0
Merci
Salut,

Un peu de lecture concernant le requête SQL du second message : http://blogs.codes-sources.com/coq/archive/2008/07/05/l-injection-sql-n-est-pas-un-probl-me-que-pour-les-d-veloppeurs-web.aspx

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Messages postés
12
Date d'inscription
vendredi 11 janvier 2008
Dernière intervention
11 juin 2009
0
Merci
Merci Coq lol,

J'ai remarqué par la suite que mon ds.Tables["favori" + z.ToString()].Rows[0].ToString();
n'etait pas correcte, mais ca ne resoud pas mon probleme

Ce probleme persiste toujours, mais dans un autre cas de figure.

J'entre dans une Textbox, je recupere son nom, et je le met dans une variable.
Puis sur un btn clique, je veux modifier le texte de ce controls, via la variable...
Voici le code
//Dans je focus ma textbox
        private void NumNote_Enter(object sender, EventArgs e)
        {    
   //Je stocke son nom
           string test = "NumNote";
        }
//Quand je clique sur le bouton
     private void Button4_Click(object sender, EventArgs e)

        {
//Je donne au control une variable

           this.Controls[test].Text = "Montexte";

        }

Mais  ca ne marche pas ...
Commenter la réponse de Mentalalex

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.