Récupérer nom du composant cliqué [Résolu]

Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Dernière intervention
9 septembre 2010
- - Dernière réponse : AIDExpress
Messages postés
8
Date d'inscription
dimanche 6 juin 2010
Dernière intervention
10 novembre 2016
- 12 juin 2012 à 18:50
Hello (ou plustot bonsoir)

J'ai plein de composants sur un formulaire. Certains font la même action que d'autres et sont directement relié au même évènement .
Exemple: je crée un textbox1 puis je vais sur son evenement MouseClick(...) puis je sélectionne un textbox2 et toujours dans la rubrique des évènements je le lie à l'évènement du textbox1 comme ça il fera la meme chose.
J'aimerai connaitre le nom du composant surlequel j'ai cliqué. Comment dois-je m'y prendre? Merci à tous...

La connaissance est la plus grande des richesses.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
3
Merci
Salut,

Essaye ca

private void button1_MouseClick(object sender, MouseEventArgs e)
 {
            string name = (sender as Control).Name;
 }

Merci WishhhMaster 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de WishhhMaster
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
3
Merci
Salut,

Tu veux changer les proprietes de la textbox qui a declenche l'evenement ?

TextBox txt = (sender as textBox);

if(txt != null)//test au cas au tu aurais connecte d'autres controles que des textboxes
{
txt.Text = "toto"; // change  le texte de la  textbox sur laquelle tu as clique
}

Merci WishhhMaster 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de WishhhMaster
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
3
Merci
Le test DOIT être fait avec 'as', même si on sait que ce sera une TextBox.
Un delegate pouvant pointer sur plusieurs event handler, on est pas à l'abri d'en rajouter un plus tard sur un autre Control, ce qui ferait planter le tout.

<hr />
-Blog-
-Site Perso-

Merci cs_Bidou 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Dernière intervention
9 septembre 2010
0
Merci
Tu es vraiment fénoménal. Merci à toi WishhhMaster!!! Ca marche nikel.

Heu ...tant qu'on n'y est...tu saurais pas comment je peux changer la propriété d'un des deux textbox à partir du nom récupéré?
Un truc du genre textbox1.Text = "toto"; sauf que le texbox1 ça serait le nom récupéré.

La connaissance est la plus grande des richesses.
Commenter la réponse de LordOfTheShadow
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Dernière intervention
9 septembre 2010
0
Merci
Merci beaucoup! Bonne soirée et fin d'année.

La connaissance est la plus grande des richesses.
Commenter la réponse de LordOfTheShadow
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
0
Merci
De rien :)
Commenter la réponse de WishhhMaster
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Dernière intervention
25 mars 2009
0
Merci
Et comme j'aime précher pour ma paroisse, je trouve que l'écriture

TextBox txt = (TextBox)sender;

est plus intuitive. C'est comme si en c++ tu castais un void* (object) en un pointeur spécifique (textbox), ni plus, ni moins.
Commenter la réponse de bubbathemaster
Messages postés
327
Date d'inscription
mardi 17 février 2004
Dernière intervention
10 avril 2010
0
Merci
Salut,

Oui peut-être.  Cependant, si l'objet que tu castes n'est pas une textbox, tu auras une belle exception à l'exécution.
Tandis qu'en utilisant "as", si l'objet ne peux pas être casté comme voulu, ça te renvoi null.
C'est pour ça que j'avais marqué
//test au cas au tu aurais connecte d'autres controles que des textboxes

car je ne savais pas si tu connectais seulement des textboxes au même gestionnaire d'évènement.
Commenter la réponse de WishhhMaster
Messages postés
8
Date d'inscription
dimanche 6 juin 2010
Dernière intervention
10 novembre 2016
0
Merci
Bonjour,

J'avais un besoin similaire mais il n'est pas tout à fait résolu.

Dans un controle utilisateur je créé des TextBlock sur lesquelles je créé l'évènement MouseLeftButonUp et je les met dans un StackPanel (avec un autre TextBlock sur lesquelle il n'y à pas l'évènement mais qui me servent pour l'espacement).

Mais quand je clique et déclanche l'évènement il me lève l'execption NullReferenceException "La référence d'objet n'est pas définie dans une instance d'un objet" sur ' string myTexboxName = (sender as Control).Name; '.

Je me doute que je doit oublier un truc mais je ne vois plus quoi alors merci de m'aiguiller.

Voici le code de mon control:

public partial class UCAnswers : UserControl
{
public UCAnswers(List<ETAnswer> etAnList)
{
InitializeComponent();
GenUC(etAnList);
this.Tag = 0;
}

public void GenUC(List<ETAnswer> etAnList)
{
for (int i = 0; i < etAnList.Count; i++)
{
sp.Children.Add(NewTB());
sp.Children.Add(NewTB(etAnList[i].ID.ToString(), etAnList[i].Libelle));
}

sp.Children.Add(NewTB());
}

public TextBlock NewTB(string name, string content)
{
TextBlock t = new TextBlock();
t.Name = "tbl_" + name;
t.Text = content;
t.TextAlignment = TextAlignment.Center;

t.MouseLeftButtonUp += new MouseButtonEventHandler(t_MouseLeftButtonUp);

return t;
}

void t_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
string myTexboxName = (sender as Control).Name;

foreach (TextBlock tbl in sp.Children)
{
if (tbl.Name == myTexboxName)
{
tbl.Foreground = new SolidColorBrush(Colors.Green);
LayoutRoot.Tag = myTexboxName.Replace("tbl_", "");
}
else tbl.Foreground = new SolidColorBrush(Colors.Red);
}
}

public TextBlock NewTB()
{
TextBlock t = new TextBlock();
t.Width = 15;
return t;
}
}
Commenter la réponse de AIDExpress
Messages postés
8
Date d'inscription
dimanche 6 juin 2010
Dernière intervention
10 novembre 2016
0
Merci
Non ne dite rien.
Comme d'ab, le temps de se poser deux minutes et...
Comme ca ca marche mieux ^^

void t_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
TextBlock tbl = (sender as TextBlock);

foreach (TextBlock t in sp.Children)
{
if (tbl.Name == tbl.Name)
{
tbl.Foreground = new SolidColorBrush(Colors.Green);
LayoutRoot.Tag = tbl.Name.Replace("tbl_", "");
}
else tbl.Foreground = new SolidColorBrush(Colors.Red);
}
}
Commenter la réponse de AIDExpress
Messages postés
8
Date d'inscription
dimanche 6 juin 2010
Dernière intervention
10 novembre 2016
0
Merci
Oups petite faute... ^^ if (tbl.Name == tbl.Name)

void t_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
TextBlock tbl = (sender as TextBlock);

foreach (TextBlock t in sp.Children)
{
if (t.Name == tbl.Name)
{
tbl.Foreground = new SolidColorBrush(Colors.Green);
LayoutRoot.Tag = tbl.Name.Replace("tbl_", "");
}
else t.Foreground = new SolidColorBrush(Colors.Red);
}
Commenter la réponse de AIDExpress
Messages postés
12350
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
8 décembre 2018
0
Merci
Bonjour,

je cite NHerny:
[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )


J'ajouterai de faire attention à l'indentation c'est plus lisible pour avoir envie de t'aider.

Il est possible que quelque part tu appelles cette méthode avec le paramètre sender qui serait null soit autre chose qu'un contrôle.

Je te conseille de tester ces deux cas dès la première ligne de ta méthode:

        private void button1_Click(object sender, EventArgs e) // Action du bouton Ajouter // 
        {
            if (sender == null || !(sender is Control)) return;//quitte la méthode si sender ne correspond pas
            ...


Whismeril
Commenter la réponse de Whismeril
Messages postés
8
Date d'inscription
dimanche 6 juin 2010
Dernière intervention
10 novembre 2016
0
Merci
Bonjour Whismeril,

Merci pour ces indication.
Je n'avais pas fais attention à l'icone pour la coloration syntaxique.
Très utile et bein plus propre c'est évident.

Merci pour ta remarque. Bien que dans le cas de mon appli ce ne peut être le cas je vais mettre ta suggestion de côté. Je vais sûrement en avoir besoin ailleur.

Cordialement,
Commenter la réponse de AIDExpress

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.