hallo,
zwei steuerelemente sollen ein beinahe identisches kontextmenü haben.
in einem von beiden kommt aber noch ein befehl hinzu.
eine zuweisung und spätere ergänzung um den weiteren befehl scheidet aus, da der befehl dann auch beim ersten control angezeigt wird:
myOtherControl.ContextMenuStrip = myControl.ContextMenuStrip;
myOtherControl.ContextMenuStrip.Items.Add(new ToolStripMenuItem("kannweg"));
folgendes geht auch nicht, weil toolstripmenuItems nur einem toolstrip angehören können und dazu führt, dass das kontextmenü des ersten controls anschliessend leer ist:
ContextMenuStrip cms = new ContextMenuStrip();
cms.Items.AddRange(myControl.ContextMenuStrip.Items);
myOtherControl.ContextMenuStrip = cms;
also wie zum kuckuck "klont" man alle items des einen menüs inklusive bereits zugewiesenem eventhandler, ohne dass dem "original" dabei ein unglück geschieht?
danke für eure hilfe
ron
Du weist dem Element einfach einen eindeutigen Schlüssel zu.
Beide Controls testen im Enter-Handler mittels ContextMenuStrip.Items.IndexOfKey(), ob der Eintrag vorhanden ist. Wenn nicht, fügt ihn das eine hinzu, falls ja löscht ihn das andere.
Hallo,
verstehe ich Dich richtig, dass beide ContextMenus "eigentlich" identisch sind? Dann erzeuge es doch komplett, also einschließlich des fraglichen ToolStripMenuItem; bei diesem wird wahlweise **Visible **auf true/false gesetzt. Jürgen
hm, hm, hm,
danke für eure idee.
sie ist für meine zwecke ein bisschen unelegant, weil die besitzer des kontextmenüs in unterschiedlichen dll´s liegen, die erst zur laufzeit geladen werden.
ich möchte eigentlich vermeiden, dass irgendein knoten meines treeviews auf verdacht mal ein menuitem einses bestimmten namens sucht, das von einem datengitter einer anderen dll eventuell hinzugefügt worden sein könnte...
ich habe hier http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1172657&SiteID=1 noch einen interessanten ansatz gefunden: hier wird in den tag der kopie das original item hineingelegt und dann ein PerformClick() aufgerufen.
noch immer nicht der eleganteste (weil bspw. ToolStripSeperators keine ToolStripMenuItems sind und daher noch eine switch anweisung in die verarbeitung müsste), aber es ist eine möglichkeit.
falls es aber **noch etwas eleganteres **gibt, bitte sagt mir bescheid! 😉
gruß
ron