Laden...

[erledigt] Klasse durch übergebene Parameter instanziieren

Erstellt von TramaticScene vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.137 Views
T
TramaticScene Themenstarter:in
7 Beiträge seit 2010
vor 14 Jahren
[erledigt] Klasse durch übergebene Parameter instanziieren

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

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo TramaticScene,

der Parameter muss den Typ Type haben. Dann kannst du Activator.CreateInstance verwenden, um das Objekt zu erzeugen.

herbivore

925 Beiträge seit 2004
vor 14 Jahren

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();
}

49.485 Beiträge seit 2005
vor 14 Jahren

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

T
TramaticScene Themenstarter:in
7 Beiträge seit 2010
vor 14 Jahren

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

2.082 Beiträge seit 2005
vor 14 Jahren

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

49.485 Beiträge seit 2005
vor 14 Jahren

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

925 Beiträge seit 2004
vor 14 Jahren

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);

T
TramaticScene Themenstarter:in
7 Beiträge seit 2010
vor 14 Jahren

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!