Form über Funktion öffnen

MAN

Erfahrenes Mitglied
Hallo,

ist es möglich durch eine selbstgebaute Funktion eine Form anzuzeigen?

Hatte mir das folgendermaßen vorgestellt:

Code:
public static void GoToNextForm( Form frmToShow )
{
   frmToShow newForm = new frmToShow();
   newForm.Show();
}

Aber das geht leider nicht. .NET meckert dann bei "frmToShow" dass es keine Klasse ist - verständlich! Aber wie könnte man es dann anstellen?

Habe eben 5 Formen, diese heißen alle nach dem gleichen Schema: "frmXYZ".
Durch den Aufruf von GoToNextForm( frmMain ) will ich also zum Beispiel wieder die Hauptform anzeigen lassen.

Irgendwie möglich?


mfG

MAN
 
frmToShow ist ja keine Klasse sondern ein Objekt! Du brauchst ja nichts neues mehr anlegen.
Probiers mal damit:
Code:
public static void GoToNextForm( Form frmToShow )
{
    frmToShow.Show();
}



Statt das über eine eigene Methode zu machen brauchst du das ja nur so zu schreiben:
Code:
...
frmMeinFormObjekt.Show();
...
Es ist ja ein Blödsinn dafür eine eigene statische Methode zu machen die nichts anderes macht als .Show();
 
Nun gut, ich bräuchte es aber in einer Funktion, da er noch mehrere Sachen dabei machen soll.

Habe das jetzt mit
Code:
public static void GoToNextForm( Form frmToShow )
{
    frmToShow.Show();
}
probiert, funktioniert aber nicht. Wenn ich dann auf einen Button klicke, der diese Funktion aufruft, passiert gar nichts!

Muss eine Form die angezeigt werden soll, nicht davor erst irgendwie geladen werden?

mfG

MAN
 
Wie erstellst Du denn das Objekt der Form-Klasse?

Nehmen wir mal an Deine Form-Klasse heisst "FrmTest". Dann muss der Code in Deinem Button so aussehen:
Code:
FrmTest frm = new FrmTest();

GoToNextForm(frm);
Sollte so klappen. Habs ausprobiert.
 
ok, so klappt das dann auch, vielen Dank!

Habe dazu noch eine Frage: wenn ich von der einen Form dann zur anderen springe: wie kann ich die alte Form entladen? Weil wenn ich sie nur verstecke (.Hide) dann wird das Programm durch this.Close() nicht komplett beendet, sondern hängt noch in den Prozessen rum. this.Close() entlädt ja dann höchstwahrscheinlich nur die eigene Form. Wenn ich jetzt aber diese Funktion GoToNextForm aufrufe, funktioniert der Befehl this.Close() bei der alten Form nicht - warum auch immer :(

Die alternative wäre eine Funktion, die das komplette Programm beendet, so etwas wie bei VB die Funktion "End", welche alle Formen automatisch entlädt, die noch aktiv sind. Gibt es so etwas vielleicht bei C#?

mfG

MAN
 
Code:
Application.Exit();
Der befehl "killt" dein Programm sehr gut und aggressiv :)
 
Nach etwas rumsuchen im Forum hatt ich das doch auch gefunden, trotzdem vielen dank für die Antwort!

Hab da einfach mal noch eine Frage (bezieht sich nur weitgehenst auf die Formen), und zwar:

Kann ich einer Funktion eine Klasse übergeben?

Damit ich dann (in diesem Beispiel) der Funktion GoToNextForm(...) die Klasse der neuen Form übergeben kann, und die Funktion baut sich selber ein objekt und zeigt das an!

Möglich oder nicht?

mfG

MAN
 
Möglich wäre das du das über Reflection machst!

Vielleicht solltest du dir mal die Klasse System.Type anschauen.

Wobei sich die Frage stellt inwiefern das Sinn macht.
Wäre ja einfach, nur einen Enum-Wert zu übergeben und in deiner statischen Methode abhängig vom Wert ein Formular zu erzeugen.


PS: Form = Das Formular und nicht die Form ;)
 
Super: das mit einem enum ist ne gute Idee! Dann kann ich das gleiche machen, wie wenn ich die Klasse direkt übergeben würde. Vielen Dank!

So, und jetzt noch eine Frage: gibt es in C# bei Steuerelementen (bei mir jetzt Option-Felder = radioButton) Indexe, also zum Beispiel habe ich 5 Options-Felder:

optTest(0) - optTest(5)

gibts das? Und wenn, wie bekomme ich das auf der Form (auf dem Formular) hin, dass er mir (so wie es in VB ist) beim kopieren eines Options-Feldes einen Index anlegt?

mfG

MAN
 
Original geschrieben von MAN
wie kann ich die alte Form entladen? [...]
Wenn ich jetzt aber diese Funktion GoToNextForm aufrufe, funktioniert der Befehl this.Close() bei der alten Form nicht - warum auch immer :(
Kannst da natürlich auch die andere mit übergeben, das schließt die Form immer dann, wenn du sie verlässt und du hast nicht bis zum Schluss noch zig Forms offen. :)
Code:
 FrmTest frm = new FrmTest();
GoToNextForm(frm, this);
}
Code:
 public static void GoToNextForm( Form frmToShow,Form frmToClose  )
{
    frmToShow.Show();
    frmToShow.Close();
}
 
Zurück