Datentyp überprüfen
-
Hallo!
Habe folgendes Problem:
Ich möchte eine Object-Instanz auf den Datentyp prüfen, und danach in den entsprechenden Datentyp umwandeln, nur bekomme ich beim Überprüfen der Instanz auf den Datentyp eine Fehlermeldung. Hier ein kleiner Ausschnitt aus meinem Quellcode:
if(Object1->GetType() == System::Windows::Forms::Button) { Object1 = (System::Windows::Forms::Button ^) Object1; }
Leider weiß ich nicht, ob der Datentyp so überprüft wird.
Wär daher sehr dankbar, wenn jemand mir erklären könnte, wie das gemacht wird. Schließlich klappt das ja beim Erstellen eines neuen Eventhandlers auch.
-
Hab es schon! Einen String daraus machen, dann geht es.
Wer noch Methoden weiß, dass ohne eine Umwandlung in einen String zu machen kann das aber auch noch gerne schreiben. ^^
-
Man verwendet doch keinen Strings, wenn es nicht unbedingt nötig ist...
Nimm lieber:
if (dynamic_cast<Button^>(Object1) != nullptr)
oder noch besser:
Button^ btn = dynamic_cast<Button^>(Object1); if (btn != nullptr) { btn->Text = "Hello"; }
-
Das Problem ist nur, das Array soll in einer Funktion durch einen Parameter übergeben werden. Da der Computer nicht weiß ob es sich jetzt um einen Button, eine PictureBox oder sonst was handelt, muss das Array vom Typ Object sein und die Instanzen müssen später wieder in ihre alte Klasse umgewandelt werden.
-
Und was willst Du mir jetzt damit sagen?
Was soll dann nicht gehen????Object^ Object1 = ...; Button^ btn = dynamic_cast<Button^>(Object1); if (btn != nullptr) { btn->Text = "Hello"; }
Funktioniert doch wunderbar....
-
Stimmt, ja funktioniert. War mir nicht sicher ob das klappt. ^^ Danke für die Hilfe. Noch eine kleine Frage: Erstellt die Zeile:
Button^ btn = dynamic_cast<Button^>(Object1);
ein neues Array mit dem Typ Button, das dann die Instanzen von Object1 kopiert bekommt, oder wandelt man damit das Array Object1 zum Typ Button um?
-
Wie der Name schon sagt, wird dynamisch versucht einen cast durchzuführen.
Und wie man an "^" erkennt, handelt es sich dabei um eine Referenz... also nix Kopie...