Laden...

wechsel zw. 2 Formen

Erstellt von dimuwe vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.910 Views
D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 17 Jahren
wechsel zw. 2 Formen

HAllo,

mein problem ist, dass ich zwischen twei Formen hin und her wechsel möchte.
Dabei soll jeweil die eine Form sichtbar sein und die andere nicht.

bisher:


 Application.Run(new frmMain());


    public partial class frmMain : Form
    {
        ....
        public frmZwei nfrmZwei = null;
        ...
        public frmMain()
        {
            InitializeComponent();
            this.Hide();
            nfrmZwei = new frmZwei();
            nfrmZwei.ShowDialog();
        }


        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Hide();
            nfrmZwei.ShowDialog();
        }

in der zweiten Form

        
        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
        }

Leider funktioniert das ganze nur einmal.
Form zwei wird angezeigt
Form eins wird angezeigt und form zwei geschlossen
form zwei wird angezeigt und Form ein geschlossen
ab jetzt nix mehr ???

Könnte mir den jemand helfen?
Besten Dank
Dirk

2.223 Beiträge seit 2005
vor 17 Jahren

moin,

so kann das auch nicht funktionieren

ich denke mal da haste was falsch verstanden

für solche spielereien brauchst du eine Art FormManger


class Programm{
        
        static void Main(string[] args) {
              FormManager app = new FormManger();
              app.Run(new FormManager());
        }
    }

public class FormManager{
        Form1 frm1;
        Form2 frm2;

        public FormManager(){
              frm1 = new Form1();
              frm2 = new Form2();

              frm1.VisibleChanged  += new System.EventHandler(frm1VisibleChanged);
              frm2.VisibleChanged  += new System.EventHandler(frm2VisibleChanged);
        }

        public void Run(){
             frm1.ShowDialog();
       }

       private void frm1VisibleChanged(object sender, EventArgs e) {
            if (frm1.Visible == false) {
                frm2.ShowDialog();
            }
      }
      private void frm2VisibleChanged_VisibleChanged(object sender, EventArgs e) {
            if (frm2.Visible == false) {
                frm1.ShowDialog();
            }
      }
}



in den jeweiligen Forms dann beim beenden nur this.Hide(); und dan sollte das funktionieren

mfg

ACHTUNG dieser Code ist ungetestet
und wahrscheinlich gibt es auch andere möglichkeiten

D
dimuwe Themenstarter:in
168 Beiträge seit 2005
vor 17 Jahren

Hallo,

besten Dank für die Antwort.
Ich habe aber, da es nicht ganz funktionierte, weiter experimentiert(mit Hilfe meines Kollegen).
Hier meine funktionierende Lösung
Programm


       static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }

Form1


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace zweiformen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 frm2 = new Form2(1);
            frm2.ShowDialog();
            this.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 frm2 = new Form2(2);
            frm2.ShowDialog();
            this.Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.Hide();
            Form2 frm2 = new Form2(3);
            frm2.ShowDialog();
            this.Show();
        }
    }
}

hier werden auch noch Parameter übergeben
Form 2


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace zweiformen
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        public Form2(int modus)
        {
            InitializeComponent();
            this.Text += "Modus " + modus.ToString();
        }
        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}

Besten Dank für die Hilfe
Gruß
Dirk

2.223 Beiträge seit 2005
vor 17 Jahren

moin

damit wirste probleme bekommen

die einzelnen Forms werden nur unsichtbar gemacht sin aber immer noch vorhanden

und du erzeugst die objekte immer wieder neu

mfg

3.170 Beiträge seit 2006
vor 17 Jahren

@blackcoin

Original von blackcoin
die einzelnen Forms werden nur unsichtbar gemacht sin aber immer noch vorhanden

und du erzeugst die objekte immer wieder neu

Wieso? Form1 wird doch einmal erstellt und mit Show() und Hide() behandelt, Form2 wird immer neu erstellt aber auch mit Close() geschlossen. Wo ist das Problem?

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

2.223 Beiträge seit 2005
vor 17 Jahren

sorry das hatte ich in der schnelle falsch gesehen

dann entschuldige bitte

mfg