Zum Inhalt springen

Neue Form aufrufen, aber nicht als Unterform


Empfohlene Beiträge

Geschrieben

Hallo!

Habe ein kleines Problem mit den Windows Forms. Nämlich bräuchte ich einen Befehl mit dem ich innerhalb einer Form zu einer anderen wechseln kann, wobei die zweite Form dann aber zur Übergeordneten werden soll. D.h. ich will nicht innerhalb einer Form eine andere aufrufen und nach Beenden der aufgerufenen Form wieder zur ersten zurück, sondern die zweite Form soll alleine überbleiben.

Gibt es da eine Möglichkeit, oder müsste ich hierzu erst Form 1 schließen, ins Hauptprogramm und von dort aus dann Form 2 aufmachen? Wär ne Alternative, jedoch habe ich sehr viele solche Übergänge zwischen veschiedenen Formen und ein direkter Wechsel würde die Sache übersichtlicher machen.

Hoffe es weiß jemand Rat. :)

Geschrieben

Hi,

du willst ja z.B. von der Startform (Form1) auf eine Folgeform die soll jedoch die Mainform werden... ich denk mal da wirst du so kein Erfolg haben, da in der Program.cs Application.Run(new Form1()); drin steht sobald Form1 geschlossen wird, sind alle Forms vom Projekt.

Hier würde sich anbieten eine Mainform zu erstellen in der du alle andren Forms rein lädst. Die kannst du dann so oft reinladen und schließn wie du lustig bist da die Mainform nicht geschlossen wird..

oder

du erstellst dir anstatt Forms Steuerelemente die kannst du dann genau so nutztn. Die Frage ob Mainform oder Steuerelemte hängt davon ab ob der User ein bestimmten Ablauf hat bei der Benutzung dann Steuerelemente ansonsten Mainform...

Geschrieben
innerhalb einer Form zu einer anderen wechseln kann, wobei die zweite Form dann aber zur Übergeordneten werden soll. D.h. ich will nicht innerhalb einer Form eine andere aufrufen und nach Beenden der aufgerufenen Form wieder zur ersten zurück, sondern die zweite Form soll alleine überbleiben.

Nur Interesse halber:

Für was soll das gut sein? Welchen Sinn soll dieses Szenario haben?

Geschrieben

Du könntest zwei WinForm Projekte erstellen. Über die Solutioneigenschaften kannst Du dann angeben, welchee Projekte gestartet werden sollen. Auch Mehrfachauswahl ist möglich. Für die Kommunikation beider Forms untereinander bietet sich das Mediator-Pattern an.

Geschrieben

Ich hatte da an so ne Art "Zustandsmaschine" gedacht, falls das jemand kennt (bin eher aus der Hardwareprogrammierung).

Ich glaub ich werds dann doch so machen, dass ich einfach beim Wechseln zu einer anderen Form die alte Form schließe und dabei nen Parameter ins Hauptprogramm übergebe, welche und ob eine neue Form geladen werden soll und gut ists.

Danke jedenfalls für den Hinweis.

Geschrieben

So auf die Schnelle:

Die Klasse Programm muss so aussehen:


    static class Program

    {


        private delegate void ShowForm(Form frm);

        private delegate void CloseForm(Form frm);

        private static event ShowForm ON_SHOWFORM;

        private static event CloseForm ON_CLOSEFORM; 

        private static List<Form> APP_FORMS = new List<Form>();



        private static void ShowFormHandler(Form frm)

        {

            frm.Show();

            APP_FORMS.Add(frm);

        }

        private static void CloseFormHandler(Form frm)

        {

            APP_FORMS.Remove(frm);

            if (APP_FORMS.Count == 0)

            {

                Application.Exit();

            }

        }


        public static void REQUEST_CLOSEFORM(Form frm)

        {

            ON_CLOSEFORM(frm);

        }

        public static void REQUEST_SHOWFORM(Form frm)

        {

            ON_SHOWFORM(frm);

        }


        /// <summary>

        /// Der Haupteinstiegspunkt für die Anwendung.

        /// </summary>

        [STAThread]

        static void Main()

        {

            ON_SHOWFORM += new ShowForm(ShowFormHandler);

            ON_CLOSEFORM += new CloseForm(CloseFormHandler);

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            ON_SHOWFORM(new Form1());

            Application.Run();

        }



    }

Und ein Fenster muss das "FormClosing" Event so umsetzen:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

    Program.REQUEST_CLOSEFORM(this);

}      

Und ein Aufruf von nem neuen Fenster muss so aussehen

private void but_open_Click(object sender, EventArgs e)

{

    Program.REQUEST_SHOWFORM(new Form2());

}

Dadurch dass man Events called wird der Programmfluss nicht behindert. Durch "Application.Run()" ohne Parameter läuft das Programme solange bis "Application.Exit()" aufgerufen wird. Die Liste mit den Fenster dient nur dazu festzustellen wann das Programm beendet werden kann.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...