Benutzer mit den meisten Antworten
C# Schließen einer Form über eine Klasse

Frage
-
Hallo,
Ich habe nun nach längeren suchen dazu entschlossen, dass ich mich an euch wende.
Ein grober Aufbau meiner Programmes:
Form2 wird durch eine Klasse geöffnet.
Form1:
Fensteroeffnen frm1 = new Fensteroeffnen(); frm1.Startseite_oeffnen();
Klasse:
public void Startseite_oeffnen() { Startseite frm1 = new Startseite(); frm1.Show(); }
Form1 soll nach dem öffnen von Form2 gehidden werden, was ich aber dann nicht zusammen bringe.
Am besten wäre es wenn es ebenfalls in einer Klasse möglich ist.
Ich bekomme es zwar hin, Form1 über Form2 zu schließen aber nicht wenn Form2 über eine Klasse aufgerufen wird, da ich die Werte von Form1 nicht auf Form2 übertragen kann um diese zu schließen.
MfG Markus Ö.
- Bearbeitet Bashesz Mittwoch, 1. Januar 2014 01:47
Antworten
-
Hallo Markus Ö.
Ich nehme an, dass du beide Formen selbst geschrieben hast, und so auch eine Kleinigkeit ändern kannst.
Du kannst du einfach eine statische Klasse erstellen, in welch sich beide Formen "Registrieren", damit Sie verfügbar sind. der Rest kann dann über die Events erledigt werden.
Hier ein Beispiel, was ich meine (für WPF - musst aber nur die Namen anpassen):
public static class WindowHelper { //Form1 soll nach dem öffnen von Form2 überdeckt werden. private static Window _startWindow; //Form1 private static Window _secondWindow; //Form2 public static void RegisterStartWindow(Window w) { WindowHelper._startWindow = w; } public static void RegisterSecondWindow(Window w) { WindowHelper._secondWindow = w; w.Loaded += w_Loaded; //Geöffnet } private static void w_Loaded(object sender, RoutedEventArgs e) { if (WindowHelper._startWindow != null) { _startWindow.Close(); //Schließen } } //... } public sealed partial class Startwindow : Window { public Startwindow() { WindowHelper.RegisterStartWindow(this); } } //... Die andere Form
Mit freundlichen Grüßen
Thomas R.
- Als Antwort markiert Bashesz Mittwoch, 1. Januar 2014 18:51
-
Hallo Markus,
vorab: benenn deine Variablen doch sinnvoll. Dann liest sich der Code (auch für dich) erheblich besser. So hab ich keine Ahnung, was bei dir nun Form1, Form2, die "Klasse", ... sein soll.
Um dir sagen zu können, was Du wo wie machen kannst/musst, um dein Vorhaben zu realisieren, müsstest Du uns bitte sagen, wann und auf welchem Weg Du Form1, Form2, ... öffnen und schließen willst.
Wird das zentral über deine "Klasse" geht, wann passiert das und kann es auch andere Formulare geben, die angezeigt/versteckt werden müssen?
Oder ist das verschachtelt, also Form1 wird über deine Klasse geöffnet, Form2 dann aus Form1 heraus, Form3 aus Form2 heraus, ...?
---
Eine mögliche Variante wäre, dass Du die Steuerung komplett über die "Klasse" erledigst.
In dem Fall bräuchten deine Fomularklassen noch eine Eigenschaft "FormHelper", der dann automatisch eine Instanz der o.g. Klasse zugewiesen wird. Damit kann man dann auch von den Formularen aus das Öffnen und Schließen anderer Formulare anstoßen.public class FormHelper { private Form1 form1; private Form2 form2;
...
public void OeffneFormular1() { if( this.form1 == null ) { this.form1 = new Form1(); this.form1.FormHelper = this; } this.OeffneFormular( this.form1, this.form2 ); } public void OeffneFormular2() { if( this.form2 == null ) { this.form2 = new Form2(); this.form2.FormHelper = this; } this.OeffneFormular( this.form2, this.form1 ); } public void OeffneFormular( Form formToOpen, Form formToClose ) { this.SchliesseFormular( formToClose ); formToOpen.Show(); } public void SchliesseFormular1() { this.SchliesseFormular( this.form1 ); } public void SchliesseFormular2() { this.SchliesseFormular( this.form2 ); } public void SchliesseFormular( Form formToClose ) { if( formToClose != null ) { formToClose.Hide(); } } }
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 1. Januar 2014 10:57
- Als Antwort markiert Bashesz Mittwoch, 1. Januar 2014 18:51
Alle Antworten
-
Hallo Markus,
vorab: benenn deine Variablen doch sinnvoll. Dann liest sich der Code (auch für dich) erheblich besser. So hab ich keine Ahnung, was bei dir nun Form1, Form2, die "Klasse", ... sein soll.
Um dir sagen zu können, was Du wo wie machen kannst/musst, um dein Vorhaben zu realisieren, müsstest Du uns bitte sagen, wann und auf welchem Weg Du Form1, Form2, ... öffnen und schließen willst.
Wird das zentral über deine "Klasse" geht, wann passiert das und kann es auch andere Formulare geben, die angezeigt/versteckt werden müssen?
Oder ist das verschachtelt, also Form1 wird über deine Klasse geöffnet, Form2 dann aus Form1 heraus, Form3 aus Form2 heraus, ...?
---
Eine mögliche Variante wäre, dass Du die Steuerung komplett über die "Klasse" erledigst.
In dem Fall bräuchten deine Fomularklassen noch eine Eigenschaft "FormHelper", der dann automatisch eine Instanz der o.g. Klasse zugewiesen wird. Damit kann man dann auch von den Formularen aus das Öffnen und Schließen anderer Formulare anstoßen.public class FormHelper { private Form1 form1; private Form2 form2;
...
public void OeffneFormular1() { if( this.form1 == null ) { this.form1 = new Form1(); this.form1.FormHelper = this; } this.OeffneFormular( this.form1, this.form2 ); } public void OeffneFormular2() { if( this.form2 == null ) { this.form2 = new Form2(); this.form2.FormHelper = this; } this.OeffneFormular( this.form2, this.form1 ); } public void OeffneFormular( Form formToOpen, Form formToClose ) { this.SchliesseFormular( formToClose ); formToOpen.Show(); } public void SchliesseFormular1() { this.SchliesseFormular( this.form1 ); } public void SchliesseFormular2() { this.SchliesseFormular( this.form2 ); } public void SchliesseFormular( Form formToClose ) { if( formToClose != null ) { formToClose.Hide(); } } }
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Mittwoch, 1. Januar 2014 10:57
- Als Antwort markiert Bashesz Mittwoch, 1. Januar 2014 18:51
-
Hallo Markus Ö.
Ich nehme an, dass du beide Formen selbst geschrieben hast, und so auch eine Kleinigkeit ändern kannst.
Du kannst du einfach eine statische Klasse erstellen, in welch sich beide Formen "Registrieren", damit Sie verfügbar sind. der Rest kann dann über die Events erledigt werden.
Hier ein Beispiel, was ich meine (für WPF - musst aber nur die Namen anpassen):
public static class WindowHelper { //Form1 soll nach dem öffnen von Form2 überdeckt werden. private static Window _startWindow; //Form1 private static Window _secondWindow; //Form2 public static void RegisterStartWindow(Window w) { WindowHelper._startWindow = w; } public static void RegisterSecondWindow(Window w) { WindowHelper._secondWindow = w; w.Loaded += w_Loaded; //Geöffnet } private static void w_Loaded(object sender, RoutedEventArgs e) { if (WindowHelper._startWindow != null) { _startWindow.Close(); //Schließen } } //... } public sealed partial class Startwindow : Window { public Startwindow() { WindowHelper.RegisterStartWindow(this); } } //... Die andere Form
Mit freundlichen Grüßen
Thomas R.
- Als Antwort markiert Bashesz Mittwoch, 1. Januar 2014 18:51
-