Mehrere MenuItems mit einer Funktion
-
Ich habe in meiner Programm eine Menüleiste mit mehreren MenuItems, die beim Draufklicken einfach nur den Checkstate ändern sollen. Damit mein Code nicht zu unüberschaubar wird, wollte ich alles mit einer einzigen Funktion machen lassen, auf die dann alle zugreifen können.
private: System::Void StandardMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { //Möglichkeit 1: if (dynamic_cast<MenuItem^>(sender)->Checked::get()) { dynamic_cast<MenuItem^>(sender)->Checked::set(false); } else { dynamic_cast<MenuItem^>(sender)->Checked::set(true); } //Möglichkeit 2: dynamic_cast<MenuItem^>(sender)->Checked::set(!dynamic_cast<MenuItem^>(sender)->Checked::get()); //Möglichkeit 3: Windows::Forms::MenuItem ^Menu = static_cast<MenuItem^>(sender); Menu->Checked::set(!Menu->Checked::get()); }
Aber egal welchen von den Codes ich verwende, kommt zur Laufzeit jedes mal die Fehlermeldung, dass der Objektverweis auf keine Objektinstanz festgelegt wurde.
Das ganze habe ich mir von hier abgeschaut:
http://www.c-plusplus.net/forum/p1689182
Allerdings sieht das ein wenig nach Borland C++ aus, oder? TObject und dergleichen kenne ich noch aus Borland Delphi. Muss ich in VC++ 2008 evtl. komplett anders vorgehen?
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Hat denn niemand eine Lösung? Funktioniert bei euch der Code etwa und es liegt evtl. an irgendeiner Compilereinstellung?
Edit: Habe den Fehler gefunden.
Anstelle von "MenuItem" hätte es "ToolStripMenuItem" heißen müssen.
-
Du solltest einfach vorher auf "nullptr" prüfen und schauen, dass auch das richtige Objekt reinkommt...
Ansonsten hilft immer noch: DEBUGGEN!
-
Jochen Kalmbach schrieb:
Du solltest einfach vorher auf "nullptr" prüfen und schauen, dass auch das richtige Objekt reinkommt...
Ansonsten hilft immer noch: DEBUGGEN!
Dadurch bin ich ja auch zufällig darauf gekommen. Im Debugger stand beim Sender der korrekte Typ drin.
Ich habe mich durch die Standardbezeichnung bei dem Event beirren lassen, die ja immer auf "MenuItem_Click" endet.
-
Wie im nativen C++ solltest du auch hier nur einmalig den dynamic_cast<> durchführen und dann den Rückgabewert auf null prüfen...
Und den Link kennst du schon: http://www.c-plusplus.net/forum/263084 ?