Connaitre objet pointé par un contextmenustrip a partir de ToolStripMenuItem à
cs_lala67
Messages postés8Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 7 janvier 2008
-
3 janv. 2008 à 16:01
cs_lala67
Messages postés8Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 7 janvier 2008
-
5 janv. 2008 à 20:57
Bonjour,
j'ai deja posté une question à peu près similaire ici.
Le problème concerne toujours l'objet pointé par le ContextMenuStrip. J'ai reussi à le retrouver avec un ToolStrip à un niveau maintenant j'aimerais le faire avec un ToolStripMenuItem à plusieurs niveaux (en gros des sous menus).
Avec un ToolStrip à un niveau j'ai reussi à retrouvé les infos sur mon objet de type Button dans le ToolStripMenuItem1 avec le code ci-dessous :
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
ToolStripMenuItem toto = sender as ToolStripMenuItem;
ContextMenuStrip id = toto.Owner as ContextMenuStrip;
Button id_boutton = id.SourceControl as Button;
MessageBox.Show("c'est l'icone numéro : " + id_boutton.Name.ToString());
}
Mon problème c'est que j'arrive pas à retrouver le numéro de l'icone comme ci-dessus depuis le ToolStripMenuItem3. J'ai essayé plusieurs cast mais aucun ne marche. J'ai toujours le nullReference dans le debug. Je sais qu'il faut que je remonte l'arborescence des ToolStrip mais je ne sais pas comment faire.
private void ToolStripMenuItem3_Click(object sender, EventArgs e)
{
ToolStripMenuItem toto = sender as ToolStripMenuItem;
ContextMenuStrip id = toto.Owner as ContextMenuStrip;// Marche pas c'est ici que j'ai la NullReference }
Merci d'avance
A voir également:
Connaitre objet pointé par un contextmenustrip a partir de ToolStripMenuItem à
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 3 janv. 2008 à 16:32
Comme tu l'as écris toi même, au dessus du ton ToolStripMenuItem3, tu as un autre ToolStripMenuItem -> donc "Owner" doit surement être un ToolStripMenuItem et non un ContextMenuStrip.
Pour remonter jusqu'au ContextMenuStrip "racine", tu peux essayer un truc du genre (de tête) :
ToolStripMeniItem toto = sender as ToolStripMenuItem;
// On recupere le parent du controle qui a levé l'évènement
Object owner = toto.Owner;
// Tant que le parent n'est pas un ContextMenuStrip
while(owner != null && !(owner is ContextMenuStrip)
{
// On pointe sur le parent du parent
owner = owner.Owner;
}
if(owner != null)
{
// On a trouvé un ContextMenuStrip
ContextMenuStrip id = owner as ContextMenuStrip;
[...] // tu peux utiliser le contextMenuStrip racine
}
cs_lala67
Messages postés8Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 7 janvier 2008 5 janv. 2008 à 20:57
Merci Nikoui pour ton aide,
j'ai essayé ta solution, le problème c'est que je ne peux pas faire :
// On pointe sur le parent du parent
owner = owner.Owner;
J'ai pas "l'option" Owner disponible pour owner.
J'ai essayé un truc hier qui me permet de savoir à quel champ du ToolStripMenuItem2 mon ToolStripMenuItem3 appartenait. J'ai essayé de remonter jusqu'au ContextMenuStrip et j'ai obtenu ça :
ToolStripMenuItem toto = sender as ToolStripMenuItem;
ToolStripMenuItem tata = toto.OwnerItem as ToolStripMenuItem;
ToolStripMenuItem titi = tata.OwnerItem as ToolStripMenuItem;
Avec ça j'obtient en message dans la box : "System.Windows.Form.ContextMenuStrip".
C'est la meme chose que j'obtient dans Le ToolStripMenuItem1(celui ou j'arrive à recuperer mes infos). En affichant toto.Owner du ToolStripMenuItem1 j'obtiens :
private void ToolStripMenuItem1_Click(object sender, EventArgs e)
{
ToolStripMenuItem toto = sender as ToolStripMenuItem;
ContextMenuStrip id = toto.Owner as ContextMenuStrip;
Button id_boutton = id.SourceControl as Button;
MessageBox.Show("test" + toto.Owner);
}
Alors je me suis dit qu'il me suffisait de caster le toto.OwnerItem.OwnerItem.Owner de mon ToolStripMenuItem3 en ContextMenuStrip, mais ca marche pas.
private void ToolStripMenuItem3_Click(object sender, EventArgs e)
{
ToolStripMenuItem toto = sender as ToolStripMenuItem;
ToolStripMenuItem tata = toto.OwnerItem as ToolStripMenuItem; // si j'affiche tata j'obtiens le ToolStrip2
ToolStripMenuItem titi = tata.OwnerItem as ToolStripMenuItem; // Si j'affiche titi j'obtiens le ToolStrip1
//ContextMenuStrip tutu = toto.OwnerItem.OwnerItem.Owner as ContextMenuStrip;
ContextMenuStrip tutu = titi.Owner as ContextMenuStrip;