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
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)...
Weeks of programming can save you hours of planning