myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Warum verschwiden Steuerelemente bei der einen WinForm und tauchen bei der anderen Form wieder auf?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Matt_Gyver
myCSharp.de-Mitglied

Dabei seit: 13.11.2020
Beiträge: 1


Matt_Gyver ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

C#-Code:
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:

C#-Code:
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.

C#-Code:
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
Neuer Beitrag 13.11.2020 15:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.805
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-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

C#-Code:
flowLayoutPanel1.Controls.Add(mitarbeiter);

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am 13.11.2020 15:34.

Neuer Beitrag 13.11.2020 15:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.565
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Neuer Beitrag 13.11.2020 18:17 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 01.12.2020 21:20