Form



  • Hallo,

    ich habe eine Windows-Forms-Anwendung erstellt. Sie besteht aus einem MDI-Parent-Fenster(Form1) und vier MDI-Children. Die MDI-Parent-Form ruft jeweils jede Unterform mithilfe eines Buttons in einer Menuleiste auf.

    Aufruf der jeweiligen Form mithilfe verschiedener Button aus Form1:

    Form2 fNeuGebiet = new Form2();
    fNeuGebiet.MdiParent = this;
    fNeuGebiet.Show();
    
    Form3 fNeuAustraeger = new Form3();
    fNeuAustraeger.MdiParent = this;
    fNeuAustraeger.Show();
    
    Form4 fGebietsliste = new Form4();
    fGebietsliste.MdiParent = this;
    fGebietsliste.Show();
    
    Form5 fAustraegerliste = new Form5();
    fAustraegerliste.MdiParent = this;
    fAustraegerliste.Show();
    

    Dann sollen die Eingaben, die in Form2(Mdi-Child) an die Form4(Mdi-Child) übergeben werden und die in Form3 (Mdi-Child) an die Form5(Mdi-Child).

    Form5:

    ...
    public partial class Form5 : Form
    {
        Form3 fAustraegerliste;
        public Form5(Form3 fAustraegerliste)
        {
            InitializeComponent();
            this.fAustraegerliste = fAustraegerliste;
        }
    ...
    

    Form4:

    public partial class Form4 : Form
    {
        Form2 fGebietsliste;
        public Form5(Form2 fGebietsliste)
        {
            InitializeComponent();
            this.fGebietsliste = fGebietsliste;
        }
    ...
    

    Also das mit dem Aufruf von Form2 und Form3 in Form1 bekomme ich ohne Probleme hin, aber dann die Werte der vorher aufgerufenen Form2 und Form3, die vom Benutzer eingegeben werden, dann an die Form4 und Form5 zu übergeben nicht.
    Ich würde mich daher um Mithilfe sehr freuen.
    Danke



  • Wenn ich raten müsste, würde ich sowas empfehlen:

    Form4 fGebietsliste = new Form4(fNeuGebiet);
    

    (dazu mußt du die beteiligten Forms eventuell irgendwo außerhalb der Button-Methoden unterbringen, z.B. als Member der Parent-Klasse)

    PS: Namen wie Form1 bis Form5 sind wirklich sehr aussagekräftig 😉



  • INFO ::::

    Form1: MDI-Parent + Menüleiste mit Buttons zum Aufrufen jeder Form
    Form2: Neue Gebiete / Eingabe von Daten zu einem neuen Gebiet in TextBoxen
    Form3: Neue Austräger / Eingabe von Daten zu einem neuen Austräger in TextBoxen
    Form4: Gebietsliste / Auflistung von allen Gebieten + Hinzufügung von Angaben aus
    Form2
    Form5: Austrägerliste / Auflistung von allen Austrägern + Hinzufügung von Angaben
    aus Form 3

    Wie gesagt das Aufrufen der Forms durch die Buttons funktioniert, lediglich der wiederholte Aufruf(Deklaration) der Forms(4+5) in Form(2+3)führt zu Problemen.

    Das was du meintest haut übrigens nicht hin.



  • Wie äußert sich denn dieses "haut nicht hin"? Ich gehe doch recht in der Annahme, daß dein Form4 eine Verknüpfung zu dem bereits vorher erzeugten Form2 benötigt, um die dortigen Eingaben zu nutzen - wenn ja, mußt du dir das bestehende Form nach dem Ende der Button-Methode merken, um es an den Konstruktor von Form4 zu übergeben.
    (wobei: Die Beschreibung, was deine Forms machen sollen, klingt für mich eher wie unsere Table/Form-Struktur: Form4 als Datentabelle wird vom Hauptfenster erzeugt und erzeugt selber ein Form2 als Eingabemaske für Einfügen/Bearbeiten/Suchen-Operationen)

    Was die Namen der Klassen angeht: Es hilft beim Verständnis eines Programms ungemein, wenn die verwendeten Namen aus etwas über die dahinterliegende Funktionalität aussagen 😉



  • Redneet schrieb:

    Wie gesagt das Aufrufen der Forms durch die Buttons funktioniert, lediglich der wiederholte Aufruf(Deklaration) der Forms(4+5) in Form(2+3)führt zu Problemen.

    Du sollst sie ja auch nicht nochmal anzeigen, sondern auf die vorhandenen zugreifen. Entweder du führst selbst Buch darüber, welche Form gerade offen ist und wie man sie referenziert.. oder du greifst in einer der MDI-Forms über f.MdiParent.MdiChildren auf Liste der MDI-Forms zu, die zum MDI-Parent gehören.

    Einfacher ist es aber wohl, es so zu machen:

    //Pseudocode
    
    class MainWindow : Form {
      private Form fNeuGebiet, fNeuAustraeger, fGebietsliste, fAustraegerliste;  //etc
    
      private void toolStripButtonGebiet_Click(Object sender, EventArgs e) {
         if (this.fNeuGebiet == null)
            this.fNeuGebiet = new FormGebiet();
         this.fNeuGebiet.Show();
      }
      //Und so weiter...
    
      private void toolStripButtonForm5_Click(Object sender, EventArgs e) {
        //Hier auch checks... je nach Bedarf.
        Form5 f5 = new Form5(this.fAustraegerliste);
        f5.Show();
      }
    }
    

Anmelden zum Antworten