Hi zusammen
Ich möchte per Knopfdruck ein MdiChild im Parent erscheinen lassen. Ich übergebe mit einem Button:
openForm(FormCreateGalery);
die Methode openForm(Form form) soltle nun irgendwie so aussehen:
openForm(Form form)
{
form childForm = new form();
childForm.MdiParent = FormMain;
}
Das schluckt der aber nicht, da er form in openForm nicht als Typ erkennt.
Ist mein Ansatz richtig, oder muss ich vielleicht andere Parameter übergeben?
Wäre schön von jemandem Rat zu bekommen!
Danke
Hallo TramaticScene,
der Parameter muss den Typ Type haben. Dann kannst du Activator.CreateInstance verwenden, um das Objekt zu erzeugen.
herbivore
Kann er auch nicht, da form ein Objekt der Klasse Form ist. Eine Möglichkeit wäre es, die Funktion generisch zu machen:
openForm<T>() where T: new(), Form
{
T childForm = new T();
childForm.MdiParent = FormMain();
}
Hallo 7.e.Q,
Kann er auch nicht, ...
doch, ...
..., da form ein Objekt der Klasse Form ist.
... deshalb schrieb ich ja, dass der Parameter vom Typ Type sein müsste.
Eine Möglichkeit wäre es, die Funktion generisch zu machen
Ja, kann man machen. Hat auch gewisse Vorteile. Allerdings muss der Typ dann zur Compilezeit bekannt sein. Mit meinem Vorschlag, kann man den Typ(namen) z.B. auch aus einer Konfigurationsdatei auslesen. Es kommt eben darauf an, was man will.
herbivore
Hey herbivore, 7.e.Q
Vielen dank für die Antworten. Ich habe herbivores Vorschlag mal ausprobiert und übergebe nun also einen Type:
openForm(typeof(FormCreateGallery));
meine Methode sieht nun so aus:
openForm(Type type)
{
object myInstance = Activator.CreateInstance(type);
}
Wie greife ich nun z.B. auf die Property MdiParent zu?
myInstance.MdiParent geht nicht. myInstance hat keine auszuwählenden Properties, nur die Standardmethoden...
Es kommt eben darauf an, was man will.
Naja, meine Vorstellungen sind noch relativ primitiv 😃 Aber ich schaue mir den Vorschlag von 7.e.Q trotzdem noch mal genauer an. Danke!
Gruss
Hallo TramaticScene,
das objekt müsstest du dann casten.
Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de
Hallo TramaticScene,
Caste den Rückgabewert von Activator.CreateInstance auf Form und verwende eine Variable vom Type Form.
Dann musst du natürlich darauf achten, dass der Typ der übergeben wird, immer eine Unterklasse von Form ist.
herbivore
Ich habe herbivores Vorschlag mal ausprobiert und übergebe nun also einen Type:
openForm(typeof(FormCreateGallery));
Sieht schonmal gut aus.
meine Methode sieht nun so aus:
openForm(Form form) { object myInstance = Activator.CreateInstance(type); }
Emm, du musst statt Form form hier natürlich Type type machen.
Wie greife ich nun z.B. auf die Property MdiParent zu?
myInstance.MdiParent geht nicht. myInstance hat keine auszuwählenden Properties, nur die Standardmethoden...
... und das zurückgegebene Objekt nach Form casten:
Form myInstance = (Form)Activator.CreateInstance(type);
Emm, du musst statt Form form hier natürlich Type type machen.
Klar, sry habe ich falsch gepostet...
Achso casten!!! Muss ich mir umbedingt anschauen, hab ich noch keine Ahnung davon...
Vielen Dank euch allen, somit wäre meine Frage beantwortet!