Hallo zusammen,
dasContextMenu wurde zur Entwicklungszeit angelegt, aber die "SubItems" eines MenuItems werden zur Laufzeit dynamisch generiert. Dazu wird ein ListView ausgelesen, dessen Items in das MainMenu kopiert (genauso generiert wie das ContextMenu) und der Inhalt des MainMenu Items in das ContextMenu MenuItem geclont(CloneMenu()).
Das ganze funkt. soweit gut, die zur Laufzeit hinzugefuegten ListViewItems werden im MainMenu korrekt angezeigt, allerdings im ContextMenu nur beim "ersten öffnen", danach sind die SubItems weg. Ist im ListView nur ein Item vorhanden zeigt es das ContextMenu auch wieder an! ?(
Habe das selbe ContextMenu an das ListView gebunden und siehe das es funzt!
Muss man was beachten wenn man ein ContextMenu an ein NotifyIcon bindet?
Thx vorab
Bewareofthis
Hallo Bewareofthis,
wenn Dein Problem noch besteht, dann poste doch mal Code (möglichst kurz und nur die problematischen Stellen, aber ohne Änderungen direkt compilierbar). Ich würde dann mal schauen.
herbivore
Danke hatt sich erledig. Das ContextMenu muss komplett zur Laufzeit generiert werden 😉
Hallo,
hab jetzt ein neues Problem:
Ich zeichne nun die MenuItems des MainMenu´s bzw. ContextMenu´s via OwnerDraw selbst. Wieder funktioniert es beim MainMenu einwandfrei, dagegen beim ContextMenu nicht. Das DrawItemEvent bzw. das MeasureItemEvent werden nie ausgeführt. Bindet man das ContextMenu an das ListView (siehe 1. Post) werden die Event´s ausgeführt. 🤔
private ContextMenu myCM =new ContextMenu();
notifyIcon1.ContextMenu=myCM;
myCM.Popup+=new EventHandler(myCM_Popup);
private void myCM_Popup(object sender, EventArgs e)
{
myCM.MenuItems.Add("test");
myCM.MenuItems[0].OwnerDraw=true;
myCM.MenuItems[0].MeasureItem +=new MeasureItemEventHandler(Form1_MeasureItem);
myCM.MenuItems[0].DrawItem +=new DrawItemEventHandler(Form1_DrawItem);
}
private void Form1_MeasureItem(object sender, MeasureItemEventArgs e)
{
}
private void Form1_DrawItem(object sender, DrawItemEventArgs e)
{
}
Gilt das OwnerDraw für das ans NotifyIcon gebundene ContextMenu nicht???
MfG
Bewareofthis
Hallo Bewareofthis,
auf jeden Fall wird das Kontextmenü eines NotifyIcons etwas anders behandelt. Einen kleinen, wenn auch nicht vollständigen Einblick gibt: ContextMenu bei Linksklick auf NotifyIcon anzeigen (ich hatte mir ShowContextMenu mit Lutz Röders Refelector angeschaut).
herbivore
War ja wieder mal klar --> hier die Lösung
Könnte vielleicht mal jemand testen obs mit dem FW 2.0 geht??
Thx vorab
Bewareofthis
Hallo Bewareofthis,
ich habe es mit .NET 2.0 probiert. Dort werden die EventHandler für MeasureItem und DrawItem aufgerufen. Ob das Zeichnen selbst geht, habe ich nicht probiert, sollte dann wohl aber.
herbivore
Thx Herbivore,
ist der FW2.0 noch beta oder kann man den schon getrost einsetzen ?
Gruß
Bewareofthis
Hallo Bewareofthis,
beides! 🙂
Für unternehmenskritische Anwendungen würde ich es nicht nehmen, und für welche mit großem Schadenspotential, aber sonst kann man 2.0 m.E. schon einsetzen, insbesondere, wenn man (fast) nur 1.1 Klassen/Methoden verwendet.
herbivore
Für unternehmenskritische Anwendungen würde ich es nicht nehmen, und für welche mit großem Schadenspotential, aber sonst kann man 2.0 m.E. schon einsetzen, insbesondere, wenn man (fast) nur 1.1 Klassen/Methoden verwendet.
Ich dacht das man 2.0 erst einsetzten darf wenn die Beta fase vorbei ist.
Jedenfals habe ich das Hier im Forum irgendwo schon mal gelesen
Wir Arbeiten eigendlich nicht wir nehmen nur das geld
Naja, in der EULA steht so wie ich das sehe lediglich, dass die Weitergabe von mit der Beta/CTP erstellten Produkten nicht gestattet ist. Ich weiß nicht, ob damit auch gemeint ist, dass die Produkte nicht in der Produktion eingesetzt werden dürfen. Übrigens soll die Beta2 bereits eine Go-Live-Lizenz besitzen, d.h. man wird mit der Beta 2 erstellte Sachen ganz normal weitergeben.
MfG VizOne