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

LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention - 3 déc. 2008 à 21:58 - Dernière réponse : AIDExpress 8 Messages postés dimanche 6 juin 2010Date d'inscription 10 novembre 2016 Dernière intervention
- 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
WishhhMaster 327 Messages postés mardi 17 février 2004Date d'inscription 10 avril 2010 Dernière intervention - 3 déc. 2008 à 22:18
3
Merci
Salut,

Essaye ca

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

Merci WishhhMaster 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de WishhhMaster
Meilleure réponse
WishhhMaster 327 Messages postés mardi 17 février 2004Date d'inscription 10 avril 2010 Dernière intervention - 3 déc. 2008 à 22:44
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de WishhhMaster
Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 4 déc. 2008 à 08:43
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_Bidou
LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention - 3 déc. 2008 à 22:39
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
LordOfTheShadow 175 Messages postés vendredi 22 décembre 2000Date d'inscription 9 septembre 2010 Dernière intervention - 3 déc. 2008 à 22:52
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
WishhhMaster 327 Messages postés mardi 17 février 2004Date d'inscription 10 avril 2010 Dernière intervention - 3 déc. 2008 à 22:53
0
Merci
De rien :)
Commenter la réponse de WishhhMaster
bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 4 déc. 2008 à 05:37
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
WishhhMaster 327 Messages postés mardi 17 février 2004Date d'inscription 10 avril 2010 Dernière intervention - 4 déc. 2008 à 06:46
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
AIDExpress 8 Messages postés dimanche 6 juin 2010Date d'inscription 10 novembre 2016 Dernière intervention - 12 juin 2012 à 17:23
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
AIDExpress 8 Messages postés dimanche 6 juin 2010Date d'inscription 10 novembre 2016 Dernière intervention - 12 juin 2012 à 17:44
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
AIDExpress 8 Messages postés dimanche 6 juin 2010Date d'inscription 10 novembre 2016 Dernière intervention - 12 juin 2012 à 17:51
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
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 12 juin 2012 à 17:56
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
AIDExpress 8 Messages postés dimanche 6 juin 2010Date d'inscription 10 novembre 2016 Dernière intervention - 12 juin 2012 à 18:50
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.