Bestimmen Sie, was die Kontrolle der ContextMenuStrip verwendet wurde, auf
Ich habe eine ContextMenuStrip
zugeordnet ist, mehrere verschiedene Listboxen. Ich versuche herauszufinden, wenn die ContextMenuStrip
geklickt wird, was ListBox
es verwendet wurde, auf. Ich habe versucht den code unten ein Anfang, aber es funktioniert nicht. Die sender
hat den richtigen Wert, aber wenn ich versuche, ordnen Sie es mit den menuSubmitted
es null ist.
private void MenuViewDetails_Click(object sender, EventArgs e)
{
ContextMenu menuSubmitted = sender as ContextMenu;
if (menuSubmitted != null)
{
Control sourceControl = menuSubmitted.SourceControl;
}
}
Jede Hilfe wäre toll. Danke.
Mit der Hilfe unten habe ich es herausgefunden:
private void MenuViewDetails_Click(object sender, EventArgs e)
{
ToolStripMenuItem menuItem = sender as ToolStripMenuItem;
if (menuItem != null)
{
ContextMenuStrip calendarMenu = menuItem.Owner as ContextMenuStrip;
if (calendarMenu != null)
{
Control controlSelected = calendarMenu.SourceControl;
}
}
}
vielen Dank für die Lösung, die ich suchte. ich hatte das gleiche problem. aber ich schlage vor, nicht verschachteln all jene
if
Aussagen und mit if (menuItem == null) return;
wenn Sie wie ich sind und nicht möchten, dass Ihr code, der verarbeitet es verschachtelt werden und eine zusätzliche unnötige 2 Ebenen.
InformationsquelleAutor Taryn | 2011-02-03
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für eine
ContextMenu
:Das problem ist, dass die
sender
parameter verweist auf die Element über das Kontext-Menü, auf das geklickt wurde, nicht das Kontext-Menü selbst.Es ist eine einfache Lösung, obwohl, weil jedes
MenuItem
stellt eineGetContextMenu
Methode, dass wird Ihnen sagen, welcheContextMenu
enthält, das Menü-Element.Ändern Sie Ihren code wie folgt:
Für eine
ContextMenuStrip
:Es ändert die Dinge ein wenig, wenn Sie ein
ContextMenuStrip
statt einerContextMenu
. Die beiden Steuerungen sind nicht miteinander verwandt, und eine Instanz eines nicht gegossen werden, um eine Instanz der anderen.Wie vor, die Element, auf die geklickt wurde, ist noch wieder in die
sender
parameter, so haben Sie, um zu bestimmen, dieContextMenuStrip
Eigentümer dieser einzelnen Menüpunkt. Sie tun dies mit demBesitzer
Eigenschaft. Schließlich, verwenden Sie denSourceControl
Eigenschaft um zu ermitteln, welches Steuerelement die Anzeige von Kontext-Menüs.Ändern Sie Ihren code wie folgt:
Ich habe aktualisiert, der code in meiner Antwort. Es gibt einen großen Unterschied zwischen den
ContextMenu
undContextMenuStrip
. (Ah, und ich sehe, Sie haben bereits herausgefunden. Naja, alle die besser zu lernen, die Dinge auf Ihre eigenen!)Ich nutzte die Eröffnungsveranstaltung, die zum aufzeichnen der SourceControl, eröffnet das Menü, um eine lokale variable, und dann verwiesen, dass bei der Bearbeitung Element klickt.
Ja,
SourceControl
ist leider null im moment einClick
Falle einerToolStripItem
sub-Element vonContextMenuStrip
ausgelöst wird. Es scheint, dass dieContextMenuStrip
'sClosed
event feuert, bevor, dieClick
Ereignis, das ist wahrscheinlich das, was verursacht das problem; ich nehme an, das Grundstück ist geräumt, nachdem Sie das Menü 'schließt'.Eigentlich, wenn der Baum tiefer ist müssen Sie eine Schleife der Kette von
OwnerItem
Eigenschaften, bis Sie eineToolStripItem
hat eineContextMenuStrip
in seinerOwner
Eigenschaft. Aber wie ich gerade kommentiert, es funktioniert nicht; dieSourceControl
auf dem Kontext-Menü den Wert "null". Sie sagte Sie kann es nicht reproduzieren, obwohl... vielleicht ist das problem tritt nur auf, mit Menüs, die tiefer als eine Ebene? Mir war zwei sub-Ebenen.InformationsquelleAutor Cody Gray
Älterer Beitrag, aber wenn jemand wie ich, kommt über ihn:
Für ein ContextMenuStrip, der oben hat bei mir nicht funktioniert, aber es führte zu der Feststellung, was getan hat.
Dieser gab mir die erwartete Kontrolle den Namen. Sie können die Validierung etc mit, wenn Aussagen, ich bin nur posting auf den Punkt zu bringen.
ContextMenu
. Das problem ist, dassItemClicked
nicht ausgelöst beim klicken auf Untermenü; Sie müssen Ihre eigenenClick
Ereignis gewesen wäre, das Element selbst als sender, nicht das Menü.InformationsquelleAutor seanu13