Laden...

Context Menu bei Listview

Erstellt von christof.k vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.993 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren
Context Menu bei Listview

Hallo!

Ich versuche, ein Contextmenu bei einer Listview zu erzeugen.
Dazu habe ich das Contextitem zu miener Form hinzugefügt und rufe im Contructor der Form folgenden Code auf:

		public void AddContextMenuAndItems()
		{
			// Create a context menu object.
		    ContextMenu mycontextmenu = new ContextMenu();
		
		    // Create empty menu item objects.
		    MenuItem topMenuItem = new MenuItem();
		    MenuItem menuItem1 = new MenuItem();
		          
		    // Set the caption of the menu items.
		    topMenuItem.Text = "&File";
		    menuItem1.Text = "&Open";
		
		    // Add the menu items to the main menu.
		    mycontextmenu.MenuItems.Add(menuItem1);
		    mycontextmenu.MenuItems.Add(topMenuItem);
		                
		
		    // Assign Menu to the form.
		    this.LocalContextMenu=mycontextmenu;
		}

Mein Problem ist, dass sich leider gar nichts tut, wenn ich die rechte Maustaste in meinem Listview drücke...habe ich irgendetwas übersehen?

Vielen Dank
Christof

N
4.644 Beiträge seit 2004
vor 19 Jahren
listView.ContextMenu = deinContextMenu;
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren

Das habe ich schon im Form-Designer gemacht. Dort wird folgende Zeile ausgeführt:

this.myListView.ContextMenu = this.LocalContextMenu;

Komisch...komisch

Christof

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren

Nun habe ich es gelöst, aber eine Frage bleibt.

Der folgende Code funktioniert:

MenuItem[] MItems = { new MenuItem("eins"), new MenuItem("zwei")};
ContextMenu cm = new ContextMenu(MItems);
this.MyListView.ContextMenu = cm;

D.h. ein Kontextmenu erscheint bei drücken der rechten Maustaste.

Ich verstehe nur nicht, warum ich dafür nichts in dem Eintrag "ContextMenu" meines Controls stehen haben muss, noch warum ich kein ContextMenu-Control in meine Form reinziehen muss???

Gibt es da eine Erklärung?

Vielen Dank
Christof

N
4.644 Beiträge seit 2004
vor 19 Jahren

Das kommt davon, wenn man sich nicht mit dem Hintergrund der vielen ( hilfreichen ) Designer beschäftigt. 😉

this.MyListView.ContextMenu = cm;

Damit weißt Du Deinem Control das ContextMenu zu, der Designer macht nix anderes.

ContextMenu cm = new ContextMenu(MItems);

Damit erstellst Du ein ContextMenu, der Designer macht nix anderes.

Schau mal in den Block "Vom Windows Form-Designer generierter Code", da findest Du die Codezeilen, die erstellt werden, wenn Du ein Control aus der Toolbox auf die Form ziehst.
⚠ Aber verändere da nichts! ⚠

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren

Sooo.....da geht langsam ein Licht auf....

Aber in diesem Falle hilft der Designer ja nicht zu viel, oder?

Ich habe jetzt contexMenu1 vom Designer generieren lassen. Folgender Code funktioniert nun

MenuItem[] MItems = { new MenuItem("MeinItem1", new EventHandler(mnuTopmost))};
ContextMenu cm = new ContextMenu(MItems);
this.contextMenu1 = cm;
this.myListView.ContextMenu = this.contextMenu1;

aber ich muss ja trotzdem das locale ContextMenu cm zuerst dem vom Designer erzeugten zuweisen und dann noch das vom Designer erzeugte dem Listview context menu zuweisen. Ist das nicht doppelt-gemoppelt?

...auf dem Weg der Erleuchtung 🙂

Christof

N
4.644 Beiträge seit 2004
vor 19 Jahren

Noch bist Du nicht erleuchtet! 😁

Ziehe ein ContextMenu auf die Form und fülle es ( im Designer, also auf der Form ) mit den Items, dann kannst Du im Eigenschaftenfenster das Menu Deinem Control zuweisen.
Das heißt, Du kannst Dir die Codezeilen sparen. 😉

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren

Jetzt bin ich erleuchtet 🙂

Der Tip, die Menüs über den Designer machen zu lassen, fehlte mir. Nun macht das alles Sinn!

Vielen Dank
Christof

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von christof.k
Jetzt bin ich erleuchtet 🙂

Freut mich. 😉

_Original von christof.k_Der Tip, die Menüs über den Designer machen zu lassen, fehlte mir. Nun macht das alles Sinn!

Jetzt weißt Du auch, was einem so ein Designer an Arbeit abnimmt. Allerdings ist es auch unverständlich wenn man sich nicht mit dem Hintergrund beschäftigt.

Ich empfehle dafür dieses Buch, da wird alles ohne Designer erstellt.

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 19 Jahren

Danke für den Tip...werde es mir zu Gemüte führen...

bis bald
Christof