Wie kann man ein dynamisches Kontextmenü erstellen ?

Goldman

Mitglied
Guten Tag.
Ich möchte ein richtig dynamisches Kontextmenü erstellen, aber ich habe bisher nur in etwa folgende Form gefunden:

Code:
private void menuItem2_Click(object Sender, EventArgs e)
{
	string[] menunames = new string[]{"test1","test2"};
	
	for (int i=0; i<menunames.Length;i++) 
	{
		//MenuItem X
		this.menuItem3 = new System.Windows.Forms.MenuItem();
		this.menuItem3.Index = i;
		this.menuItem3.Text  = menunames[i];

		if(menunames[i]=="test1")
		{
			this.menuItem3.Click += new System.EventHandler(this.mItest1_Click);
		}
		else if(menunames[i]=="test2")
		{	
			this.menuItem3.Click += new System.EventHandler(this.mItest2_Click);
		}

		// Initialize menuItemX
		this.contextMenu1.MenuItems.AddRange(
			new System.Windows.Forms.MenuItem[] {this.menuItem3});
	}
}

//hier wird die Aktion festgelegt, welche ausgeführt werden soll.
private void mItest1_Click(object Sender, EventArgs e) 
{				
	MessageBox.Show("mItest1");
}


private void mItest2_Click(object Sender, EventArgs e) 
{				
	MessageBox.Show("mItest2");
}


Ich kann mit dieser Methode nur eine beim programmieren festgelegte Anzahl von menuitems erstellen (private void mItest1_Click, private void mItest2_Click, private void mItest3_Click ... )
Ich möchte nun aber die Anzahl dynamisch halten.

Kann mir da einer weiterhelfen ?

// Editiert durch Alex S.
Ich war so frei und hab Code-Tags gesetzt.
 
Zuletzt bearbeitet von einem Moderator:

hbz

Grünschnabel
Hallo,
Code:
      int panz = 0;
      void InitContextMenu() {   // wird z.B. vom Konstruktor der Form aufgerufen
         ContextMenu = new ContextMenu();
         ContextMenu.MenuItems.Add(new MenuItem("Hinzufügen", new EventHandler(OnHinzu)));
         ContextMenu.MenuItems.Add(new MenuItem("Entfernen",  new EventHandler(OnWeg)));
      }
      private void OnHinzu(object Sender, EventArgs e) {
         panz++;
         string txt = "Menü-Punkt-" + panz;
         ContextMenu.MenuItems.Add(new MenuItem(txt, new EventHandler(OnMenuePunkt)));
      }
      private void OnWeg(object Sender, EventArgs e) {
         if (panz > 0){
            ContextMenu.MenuItems.RemoveAt(2 + --panz);
         }
      }
      private void OnMenuePunkt(object Sender, EventArgs e) {
         MessageBox.Show(((MenuItem)Sender).Text);
      }
Grüsse
Hannes
 

Anhänge

  • form1.txt
    2,3 KB · Aufrufe: 65

Neue Beiträge