| 

.NET C# Java Javascript Exception

1
Hi zusammen,
wie kann ich verschiedene "Forms" mit einer extra erstellten Klasse aufrufen?
also anstatt so:
Form f1 = new Form1();
f1.StartPosition=FormStartPosition.CenterScreen;
f1.Show();

würde ich es gerne so aufrufen:
openForm(Form1);

also nur mit dem übergebenen Form-Namen.

DANKE :)
08.08.2011
DaTaBeRt 419 1 7
4 Antworten
4
In der openForm-Methode müsste so etwas stehen:
Form f = (Form)Activator.CreateInstance("assemblyname", "form1");
f.Show();
08.08.2011
sgf 426 3
mist... ich Tippe heut zu langsam ;)
michlG 08.08.2011
0
Hallo,

da musst du den Typ mitgeben.
D.h. du erstellst eine Methode welche sich einen Type erwartet der = Form ist oder davon ableitet.
Danach kannst du dann mit Activator.CreateInstance eine Instanz des Typs erstellen und diese dann auf Form casten.
Mit dem daraus resultierenden objekt kannst du dannd ie StartPosition setzen und show aufrufen.

Aber der Sinn von so einer Methode erschließt sich mir nicht ganz...

Gruß
Michael
08.08.2011
michlG 1,7k 1 5
naja ich hab einige buttons die unterschiedliche fenster aufrufen und ich bin zu faul jedes mal die startpostion zu setzen und es mit .show()aufzurufen :D
DaTaBeRt 09.08.2011
0
Hallo DaTaBeRt,

auch wenn die bisherigen Antworten Dein Problem lösen, weil sie ziemlich präzise auf Deine Frage antworten, möchte ich trotzdem noch einen alternativen Vorschlag bringen.

Warum implementierst Du Dir keinen WindowManager. Der kann die Funktionalität Open/Close/BringToFront/... für bei ihm registrierte Fenster implementieren. Das sollte es aber auch schon gewesen sein mit seinen Aufgaben, denn das Registrieren der Fenster ist ein anderer Belang und gehört auch woanders hin. Zum Beispiel in ein IWindowRegistrationModule oder sowas in der Art. Sollte ja kein Problem darstellen, den Formularen dann auch einen Namen mitzugeben (über den Du sie dann referenzieren kannst), aber deren Erzeugung wird nicht von der "Maybe-almighty-Factory" Activator übernommen, sondern Du kannst eigene Factories für Deine Formulare implementieren.
Dein Problem zerfällt in viele kleine und leicht verständliche Teile.

Gruß
Florian
09.08.2011
ffordermaier 8,4k 2 9
0
Danke für eure Hilfe!
so hab ich es jetzt hinbekommen:
public class openForm
{
public openForm(Type name)
{
Form f = (Form)Activator.CreateInstance(name);
f.StartPosition = FormStartPosition.CenterScreen;
f.Show();
}
}

und mit
new openForm(typeof(Form1));

lässt sich das ganze aufrufen.
09.08.2011
DaTaBeRt 419 1 7

Stelle deine .net-Frage jetzt!