Laden...

Context-Menu an NotifyIcon funzt net

Erstellt von Bewareofthis vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.189 Views
B
Bewareofthis Themenstarter:in
59 Beiträge seit 2005
vor 19 Jahren
Context-Menu an NotifyIcon funzt net

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

49.485 Beiträge seit 2005
vor 19 Jahren

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

B
Bewareofthis Themenstarter:in
59 Beiträge seit 2005
vor 19 Jahren

Danke hatt sich erledig. Das ContextMenu muss komplett zur Laufzeit generiert werden 😉

B
Bewareofthis Themenstarter:in
59 Beiträge seit 2005
vor 19 Jahren

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

49.485 Beiträge seit 2005
vor 19 Jahren

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

B
Bewareofthis Themenstarter:in
59 Beiträge seit 2005
vor 19 Jahren

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

49.485 Beiträge seit 2005
vor 19 Jahren

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

B
Bewareofthis Themenstarter:in
59 Beiträge seit 2005
vor 19 Jahren

Thx Herbivore,

ist der FW2.0 noch beta oder kann man den schon getrost einsetzen ?

Gruß

Bewareofthis

49.485 Beiträge seit 2005
vor 19 Jahren

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

1.549 Beiträge seit 2004
vor 19 Jahren

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

1.373 Beiträge seit 2004
vor 19 Jahren

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