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

afortineau 4 Messages postés jeudi 26 février 2009Date d'inscription 13 mars 2009 Dernière intervention - 11 mars 2009 à 14:21 - Dernière réponse : afortineau 4 Messages postés jeudi 26 février 2009Date d'inscription 13 mars 2009 Dernière intervention
- 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
cs_lingli 2 Messages postés mardi 8 novembre 2005Date d'inscription 12 mars 2009 Dernière intervention - 11 mars 2009 à 16:21
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

Merci cs_lingli 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

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


Veux-tu publier ta solution finale?






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