Invalid cast exception
-
Hallo
ich habe folgendes Problem
Über eine checkbox möchte ich ein Usercontrol zuweisen!
versucht habe ich das mit diesem cast:m_oUCControl = (System::Windows::Forms::UserControl^)(cbControl->Text)
währemd der Laufzeit bekomme ich allerdings eine Invalid cast exception
welche Möglichkeiten zur Datentypumwandlig gäbe es sonst noch?LG
-
Du willst ein Objekt des Typs String in ein Objekt des Typs UserControl umwandeln?
-
ja!
ich sehe keine andere Möglichkeit wenn ich das Usercontrol über eine Textbox auswähle!
-
Ein String ist aber nunmal kein UserControl sondern eine Kette von Zeichen. Deswegen kann ein solcher Cast nicht gehen.
Entweder du willst eine Factory oder du willst irgendwas mit Reflection machen. Google mal danach (bei der suche nahc Factory noch Pattern dazu angeben).
-
habe mir einige beispiele über factory durchgelesen - weiß aber nicht wie ich das hier anwenden soll!
wie soll ich dieses Entwurfsmuster verwenden um von einem string auf ein UserControl zu kommen?
-
Werde Dir doch erstmal klar, was Du willst. Du willst ganz bestimmt nicht einen String in ein UserControl umwandeln. Wie sollte das bitte gehen, was soll dabei rauskommen? Ein Knopf, ein Bild, oder ein Flashplayer vielleicht?!
Willst Du vielleicht ein existierendes UserControl suchen, welches als Namen den Text in der Textbox trägt? Dann könntest Du z.B. alle UserControls in ein Dictionary packen.
Willst Du ein UserControl erzeugen, dessen Typ als Namen den Text in der Textbox trägt? Dafür wären Factory (oder evtl. Reflection) ein geeigneter Ansatz.
-
in meiner Form habe ich mehrere UserControls die einander Elemente (sind auch wieder UserControls) übergeben können.
Über einen Dialog will ich nun jedem dieser UserControls ein anderes UserControl als Nachfolger zuweisen
im Constructor dieses Dialogs füge ich die UserControls der Form in eine ComboBox ein (Dazu muss ich sie klarerweise in einen String umwandlen)
Nun wird über diese ComboBox ein UserControl (also kein Control sondern der String) gewählt!
Und irgendwie muss ich mit diesem String auf das bestehende Element verweisen - von erzeugen war nie die Rede!
-
wie muss ich so ein Directory implementieren?
könntest du bitte vielleicht ein kleines Beispiel posten?Danke LG
-
Nunja, Du musst am Anfang Deiner Anwendung (Konstruktor oder OnLoad-Ereignis) einmal diese Mappe füllen. Ob Du das aus der Controls-Collection der Form oder manuell machst, bleibt Dir überlassen, einmal wirst Du es auf jeden Fall machen müssen. Anbei folge ein Beispiel mit manueller Befüllung eines Dictionary:
using namespace System::Collections::Generic // Klassenmitglied Dictionary< String^, UserControl^ >^ m_controls; // z.B. im Konstruktor nach InitializeComponent() m_controls = gcnew Dictionary< String^, UserControl^ >; m_controls->Add( MyUserControl1->Name, MyUserControl1 ); m_controls->Add( TollesControl->Name, TollesControl ); m_controls->Add( NochEins->Name, NochEins ); // Benutzung: m_oUCControl = m_controls[cbControl->Text];
Wobei Du anstatt Objekt->Name natürlich auch "literale Strings" als Keys fürs Dictionary verwenden kannst.
-
Danke für die Hilfe!
funktioniert problemlos!