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

Messages postés
4
Date d'inscription
jeudi 26 février 2009
Dernière intervention
13 mars 2009
- - Dernière réponse : afortineau
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Dernière intervention
13 mars 2009
- 13 mars 2009 à 08:55
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
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
2
Date d'inscription
mardi 8 novembre 2005
Dernière intervention
12 mars 2009
3
Merci
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

Dire « Merci » 3

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

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

Commenter la réponse de cs_lingli
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Dernière intervention
13 mars 2009
0
Merci
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
Commenter la réponse de afortineau
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Dernière intervention
13 mars 2009
0
Merci
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 !
Commenter la réponse de afortineau
Messages postés
874
Date d'inscription
jeudi 4 mars 2004
Dernière intervention
19 août 2014
16
0
Merci
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
---------------------
Commenter la réponse de billou_13
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
58
0
Merci
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-
Commenter la réponse de cs_Bidou
Messages postés
2
Date d'inscription
mardi 8 novembre 2005
Dernière intervention
12 mars 2009
0
Merci
Lilie,


Veux-tu publier ta solution finale?






lingli
Commenter la réponse de cs_lingli
Messages postés
4
Date d'inscription
jeudi 26 février 2009
Dernière intervention
13 mars 2009
0
Merci
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
Commenter la réponse de afortineau

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.