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

Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 2 oct. 2008 à 10:07 - Dernière réponse : Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention
- 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
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 2 oct. 2008 à 13:54
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

Merci billou_13 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 99 internautes ce mois-ci

Commenter la réponse de billou_13
Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 2 oct. 2008 à 10:28
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
Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 2 oct. 2008 à 15:09
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
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 2 oct. 2008 à 15:43
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
Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 2 oct. 2008 à 16:09
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
billou_13 874 Messages postés jeudi 4 mars 2004Date d'inscription 19 août 2014 Dernière intervention - 2 oct. 2008 à 16:28
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
Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 2 oct. 2008 à 18:05
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
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 4 oct. 2008 à 12:21
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
Mentalalex 12 Messages postés vendredi 11 janvier 2008Date d'inscription 11 juin 2009 Dernière intervention - 9 oct. 2008 à 15:49
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.