Ich möchte zur Laufzeit aus einem Form-Namen als String ein Form-Objekt erzeugen. Ich mache das über Type.GetType() und Activator.CreateInstance().
Das ganze klappt auch, wenn das zu erstellende Formobject bzw. Klasse im gleichen Projekt ist. Da ich aber eine Projektmappe mit einem Startprojekt (exe) mit diversen Projekten (DLLs) habe, möchte ich auch aus anderen Projekten die Forms erzeugen. Das klappt leider nicht. Im Hauptprojekt ist der Namespace bekannt. Auch der Verweis auf die DLL in vorhanden. Es kommt immer der Fehler "... Klasse konte nicht geladen werden" bei Type.GetType().
private Control createNewControl(string controlToCreate)
{
Form myControl = new Form();
try
{
//Define the type of the control you want to create an instance of using reflection.
Type typeofControl = Type.GetType(controlToCreate, true);
myControl = (Form)(Activator.CreateInstance(typeofControl));
//(myControl as Form).Show();
}
catch (Exception ex)
{
//Set the control to null
myControl = null;
}
return myControl;
}
Gruß
Holger
Hallo Holger,
wie übergibst du denn den Typnamen? Laut :rtfm: muss es sich um den **AssemblyQualifiedName **handeln: einschließlich Assembly, Version und CultureInfo.
Type.GetType-Methode
typeName: Der Name des abzurufenden AssemblyQualifiedName.
Gruß Jürgen
Hallo HolgerBremen,
deine try-catch
-Konstruktion kannst du mit dem as
-Cast schöner lösen; so musst du keine "unnötige" Exception feuern ...
[Tipp] Casten aber richtig: Begriffe wie Cast / is / as beschreibt, wie das Casten funktioniert.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg