Acceder à un bouton par son nom (chaine de caractères) [Résolu]

Signaler
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
13 mars 2009
-
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
13 mars 2009
-
Bonjour,

Je souhaite écrire une fonction qui me permet de modifier le texte d'un bouton en entrant le nom de ce bouton en paramètre (chaîne de caractère). Malheureusement je n'arrive pas à trouver le code adéquat... si quelqu'un pouvait me donner une piste, ça serait fort sympathique !

Voila le code que j'utilise :

Delegate
private
delegate
void
UpdateBtn(
string wNomBtn);

Lors de l'appel de la fonction
this.Invoke(
new
UpdateBtn(UpdateBtnText),
"nomBtn");

Fonction Update...qui ne fonctionne pas... J'ai essayé d'autres méthodes qui ne sont pas plus concluantes...
private

void UpdateBtnText(
string wBtnName)
{
  ("nomBtn" as Button).Text = "";
}

Merci d'avance pour vos réponses

9 réponses

Messages postés
2
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
12 mars 2009

Pourquoi, tu ne passes pas carrement le bouton comme paramètre:
private void UpdateBtnText(Button pBtn, string pNewText)
{
     pBtn.Text = pNewText;
}

Si ça ne répond pas ta question.

private void UpdateBtnText(string pBtnName, string pNewText)
{
   foreach (
Control ctrl
inthis.Controls)
      {

         if ((ctrl is Button) &&  (

 ctrl.Name==   pBtnName ))
            ctrl.Text = pNewText;
       }
}

Salut!

lingli
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
13 mars 2009

Merci Lingli pour ta réponse,

en fait je ne peux pas passer le bouton en paramètre car je n'ai que son nom sous forme d'une châine de caractères...

Je suis donc arrivée moi aussi à une solution du type de la solution 2, par contre je trouve dommage de devoir parcourir tous les controles du formulaire pour trouver le bon...

Si quelqu'un a une idée pour optimiser cette solution, je suis preneuse !

A+
Lilie
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
23
Bonsoir,

Tu peux faire un truc comme ça:
Control[] btns = this.Controls.Find("button1", false);//ou true suivant le niveau de ton bouton
if(btns.Length > 0)
{
   btns[0].Text = "ici";
}

Mais je doute que tu optimises beaucoup plus que la solution de lingli.
Cependant, je ne vois pas comment faire autrement.

Bonne soirée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
23
Au temps pour moi, je n'avais pas pensé à cette méthode:
this.Controls["button1"].Text = "ici";

Pas plus simple :)

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
13 mars 2009

Merci Billou mais en fait ta dernière solution ne fonctionne pas avec un string, il faut que l'index de this.Controls soit de type int... dommage ça me plaisait plutot pas mal comme méthode !
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
23
Allons, allons ma chère :)
Je teste toujours mes sources avant de poster lol

Plus sérieusement, cela marche de mon côté. Il s'agit d'un projet WinForm.

Bonne soirée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
La méthode est suffisamment rapide, puisqu'en principe un formulaire ne doit pas contenir des centaines de Controls.
On pourrait imaginer le cas échéant les stocker tous dans une hashtable, mais je doute fort que ce soit vraiment utile...

<hr />
-Blog-
-Site Perso-
Messages postés
2
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
12 mars 2009

Lilie,


Veux-tu publier ta solution finale?






lingli
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Statut
Membre
Dernière intervention
13 mars 2009

Hello,

Finallement je vais rester sur la soution de lingli...merci Billou pour ton idée mais chez moi ça ne donne rien (aurais-je oublier de préciser que je suis sous le compact framework :-$).

Merc pour vos idées !
Lilie