J'ai une application WinForms avec plusieurs commandes d'éléments de menu qui correspondent au même gestionnaire. J'utilise la propriété Tag
des éléments de menu pour identifier le comportement du gestionnaire. Le problème est que le paramètre sender
du gestionnaire est de type object
. Alors, comment lire la propriété Tag
d'un objet?Comment accéder en toute sécurité à la propriété de l'objet
Je sais que je peux classer sender
au type de mon élément de menu, mais que se passe-t-il si je veux qu'un bouton ou un autre contrôle soit mappé au même gestionnaire? Existe-t-il un moyen générique de lire la propriété Tag
à partir de n'importe quel objet est l'expéditeur?
Voici ce que j'ai jusqu'ici. Cela semble fonctionner. Mais n'y a-t-il pas une manière plus simplifiée?
private void Header_Click(object sender, EventArgs e)
{
dynamic ctrl = sender as dynamic;
if (ctrl != null && sender.GetType().GetProperty("Tag") != null)
{
// Go ahead and reference ctrl.Tag
}
}
C'est ce que je pensais. Mais apparemment les éléments de menu ne dérivent pas de 'Control'. –
@Jonathan alors essayez quelques choses via 'as' - ou si vous êtes sûr qu'il a un .Tag, vous pouvez le transformer en' dynamic' –
@MarcGravell: Je pensais que je le transformais en 'dynamic'. –