Laden...

Warum verschwiden Steuerelemente bei der einen WinForm und tauchen bei der anderen Form wieder auf?

Erstellt von Matt_Gyver vor 3 Jahren Letzter Beitrag vor 3 Jahren 382 Views
M
Matt_Gyver Themenstarter:in
1 Beiträge seit 2020
vor 3 Jahren
Warum verschwiden Steuerelemente bei der einen WinForm und tauchen bei der anderen Form wieder auf?

Moin Gemeinde,

habe ein kleines Proplem mit meiner GUI.
Ich habe eine static Class mit einer Liste. Sobald sich was in diesere Liste geändert hat löst sie ein event aus und die GUI zeigt die geänderten Benutzersteuerelemente an. Das klappt mit einem Fenster sehr gut. Jetzt habe ich aber ein zweites Fenster die auch die selben Benutzersteuerelement anzeigen soll, das klappt aber nicht. Sie verschwinden von einem Fenster und wandern auf das andere Fenster.

Das ist die static class.


public static List<Mitarbeiter> mitarbeiters = new List<Mitarbeiter>();

public static event EventHandler Aktualiesieren;

public static void ONAktualiesieren(EventArgs e)
{
    EventHandler handler = Aktualiesieren;
    if (handler != null)
    {
        handler(typeof(Speichern), e);
    }
}

Hier ist die Funktion die aufgerufen wird von meinen beiden Fenster:


public void MitarbeiterLaden()
{
    if (Speichern.mitarbeiters != null)
    {
         foreach (Mitarbeiter mitarbeiter in Speichern.mitarbeiters)
         {
              Mitarbeiter ma = new Mitarbeiter();
              ma = mitarbeiter;
              flowLayoutPanel1.Controls.Add(ma);
          }
     }
     else
     {
            Console.WriteLine("Keine Mittaerbeiter mehr in der Liste");
      }
}

Hier werden meine beiden Fenster zugewiesen und dann wird im jedem Fenster die
MitarbeitenLaden() Funktion aufgerufen.


private void b_rrm_starten_Click(object sender, EventArgs e)
{
      MainWindow mw = new MainWindow();
      mw.Show();
}

Ich hoffe mein problem ist verständlich erklärt worden.

Mfg
Mathias

4.939 Beiträge seit 2008
vor 3 Jahren

Hallo und willkommen,

ein Steuerelement (Control) kann immer nur auf genau einer Form (bzw. Container-Control) angezeigt werden, da es nur einen Parent haben kann.
Sobald es also zu einer anderen Form hinzugefügt wird, wird es von der bestehenden Form entfernt.

Statische Klassen sind kein gutes Software-Design. Verwende besser die [Artikel] Drei-Schichten-Architektur.

PS: Und auch der Code


Mitarbeiter ma = new Mitarbeiter();
ma = mitarbeiter;
flowLayoutPanel1.Controls.Add(ma);

ist ungeschickt, denn damit erzeugt du einen neuen Mitarbeiter und überschreibst die Referenz gleich wieder (so daß der neu erzeugte gleich wieder vom Garbage Collector gelöscht wird).
Es reicht


flowLayoutPanel1.Controls.Add(mitarbeiter);

PPS: mitarbeiters als Mehrzahl sowie der Rechtschreibfehler in Aktualiesieren sind ebenso unschön (zu lesen)...

5.658 Beiträge seit 2006
vor 3 Jahren

Weeks of programming can save you hours of planning