Laden...

Wie klont man ein ContextMenuStrip?

Erstellt von citizen.ron vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.134 Views
citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren
Wie klont man ein ContextMenuStrip?

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

B
1.529 Beiträge seit 2006
vor 16 Jahren

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.

J
3.331 Beiträge seit 2006
vor 16 Jahren

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

citizen.ron Themenstarter:in
432 Beiträge seit 2005
vor 16 Jahren

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