Dynamisches Array in C++

Aj2010

Mitglied
Dynamisches Kontextmenü in C++/CLI

Das soll Dynamisches Kontextmenü heißen. sorry, kann das mal bitte wer ändern?

Hallo, ich hab ein Problem.

Und zwar, Ich muss ein dynamisches Kontextmenü in mein Programm integrieren. Das Statische wäre kein Problem, aber das Ganze Dynamisch machen ist etas Komplizierter. Da die Eventhandler ja auch gesetzt werden muss.

Zu meiner aktuellen Aufgabenstellung: Ich habe einen Datensatz an Antworten. Es gibt viele DatenSätze mit einer Unterschiedlichen Menge an Antworten. Wenn die Visible Eigenschaft der einzelnen Antwort auf false gesetzt wird, muss das Kontextmenü auch kleiner werden.

Ich hab grad etwas gesucht, aber nur was zum alten ContextMenu gefunden. Das gibts in .Net 4.0 C++ anscheinend nicht... da haut er mir nen Bezeichner-Fehler raus.

Ich hab mir gedacht, dass ich die MenuItems in einer schleife jedesmal neu erstellen lasse und gleichzeitig die Handler dazu. Problem ist nur, Ich weiß nicht wie ich das im ContextMenustrip rein haun kann. Hoffe auf Hilfe, da dies die zweite große Bedingung in meinem Prüfungsprojekt ist.
 
Zuletzt bearbeitet:

Nico Graichen

Erfahrenes Mitglied
Hi Aj2010

Wenn du das Problem selbst lösen konntest, würde ich dich bitten, die Lösung hier zu posten, so dass sie anderen auch zur Verfügung steht, und den Thread als "Erledigt" markierst.

Danke!
 

Aj2010

Mitglied
Deswegen hatte ich geschrieben, dass der Titel des Themas geändert werden muss. =)
aber dennoch hier meine Lösung. =) (Wurde mit Hilfe erstellt)
Code:
void Form1::aufbauAntworten() {
		try {
			List<Antwort^> ^daten;
			for each (AntwortDaten ^fach in faecher) {
				if (fach->getAusgewaehlt()) {
					daten = fach->getAntworten();
				}
			}
		
			contM = gcnew System::Windows::Forms::ContextMenu();
			this->ContextMenu = contM;
			for each (Antwort ^antwort in daten){
				if(antwort->istSichtbar()) {
					MenuItem ^mnuItemOpenWith = gcnew MenuItem();
					mnuItemOpenWith->Text = antwort->getAntwort();
					mnuItemOpenWith->MenuItems->Add(mnuItemOpenWith);
					mnuItemOpenWith->Click += gcnew System::EventHandler(this, &Correctus::Form1::menuItem1_Click);
					contM->MenuItems->Add(mnuItemOpenWith);
				
				}
			}
		}
		catch(Exception ^) {
			MessageBox::Show("Bitte Prüfung auswählen", "Fehler");
		}
	}

hab das per try-catch- Block erstellt, da er ja daten brauch, die er einlesen soll. Da es ansonsten fatale fehler gibt, wenn man noch keine Prüfung ausgewählt hat. =)