SourceControl vom ContextMenuStrip im Untermenü bestimmen

24/03/2010 - 18:00 von Alexander Richter | Report spam
Hallo,
ich habe zur Laufzeit ein Kontextmenü mit einem Untermenü
erstellt. Dafür habe ich das ContextMenuStrip verwendet.
Ich benötige mit dem Click auf den Menüeintrag das Control,
an das das Kontextmenü gebunden ist (ein Label).

In der ersten Ebene vom Kontextmenü erhalte ich mit
contextMenuMain.SourceControl auch das Label.
Nur für den Menüeintrag im Untermenü funktioniert es nicht.

private ContextMenuStrip contextMenuMain = new ContextMenuStrip();

private void CreateContextMenuMain() {
contextMenuMain.Items.Add("Menüpunkt Ebene 1");
contextMenuMain.Items.Add("Sonderfunktion");

ToolStripDropDownItem subMenuSonderfunktionen =
(ToolStripDropDownItem)contextMenuMain.Items[1];
ToolStripItem subItemMenupunkt2 =
subMenuSonderfunktionen.DropDownItems.Add("Menüpunkt Ebene 2");

subItemMenupunkt2.Click += new System.EventHandler(MenuPunktEbene2_Click);
}

private void MenuPunktEbene2_Click (object sender, EventArgs e) {
switch (((ToolStripItem)sender).Text) {
case "Menüpunkt Ebene 2":
// hier will ich das SourceControl - also das Label - vom
Kontexmenü
//contextMenuMain.SourceControl liefert mir natürlich null
//mit ((ToolStripItem)sender).Owner bin ich nicht weitergekommen
break;
default:
break;
}
}


Hat jemand eine Lösung?

Alexander
 

Lesen sie die antworten

#1 Frank Dzaebel
24/03/2010 - 18:54 | Warnen spam
Hallo Alexander,

In der ersten Ebene vom Kontextmenü erhalte ich mit
contextMenuMain.SourceControl auch das Label.
Nur für den Menüeintrag im Untermenü funktioniert es nicht.



ja, by design. Der einfachste Weg ist AFAIK:

private Control aktuellesSourceControl;

public Form1()
{ InitializeComponent();
contextMenuMain.Opening += ContextMenuMain_Opening;
}

void ContextMenuMain_Opening(object sender, CancelEventArgs e)
{ aktuellesSourceControl = contextMenuMain.SourceControl;
}

und dann an der gewünschten Stelle eben aktuellesSourceControl
abzufragen.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen