none
C# windows forms Aktive bez. das Panel das angezeigt wird entfernen! RRS feed

  • Frage

  • Hey,

    ich habe bei meinem Programm in dem Panel pnl_Anzeige wird immer dort (jenachdem welchen Button man geklickt hat) ein anderes Panel bei pnl_Anzeige hinzugefügt!

    Jetzt muss ich das alte panel nur noch von pnl_Anzeige entfernen! Wie entferne ich dann das Panel das gerade angezeigt wird? 

    INFO:
    Ich habe 4 - 5 Verschiedene Panels die angezeit werden sollen!

    Sonntag, 18. Dezember 2016 13:12

Antworten

  • Hallo,

    weil ich nicht sicher bin, was du eigentlich machen möchtest (ich verstehe es so, dass ein "Main-Panel" existiert, in dem verschiedene "Unter-Panel" angedockt oder angezeigt werden sollen, vielleicht ein Wizard), hier ein eher wager Vorschlag:

    1.) Füge deine instantiierten und konfigurierten Panel zu einer "List<Panel> subPanel" hinzu.

    2.) Beim Klick z.B. auf einen Button löschst du die Controls im pnl_Anzeige: pnl_Anzeige.Controls.Clear()

    3.) Dann fügst du das gewünschte Panel hinzu: pnl_Anzeige.Controls.Add(subPanel[xy]), dockst es an und setzt visible=true

    Das sollte gehen.

    Gruß

    • Als Antwort markiert BNCrazzyCat Dienstag, 20. Juni 2017 10:38
    Dienstag, 20. Dezember 2016 00:57

Alle Antworten

  • Hallo,

    entfernen kannst du Elemente aus einer Auflistung mit der Remove bzw. RemoveAt Methode. Also entweder du kennst den Index des Panels oder aber dessen Instanz:

    myParentPanel.Controls.Remove(myOldPanel);


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 18. Dezember 2016 14:02
  • Ja das weis ich auch! 

    Aber ich habe ja 4 Verschiedene Panels bei denen ich nicht weis welches gerade aktiv ist!

    Dann habe ich versicht es so zu lösen:

    public void removeAktivePanel()
            {
                Settings set = new Settings();
                KlassenAdd kAdd = new KlassenAdd();
                Datenverwaltung datVer = new Datenverwaltung();

                bool NoErrors = true;

                try
                {
                    if (set.pnlSettingsAktive == true)
                    {
                        this.pnlAnzeige.Controls.Remove(set.pnlSettings);
                        debCo.writeText("Adding bez. removing the Controls!");
                        set.pnlSettingsAktive = false;
                    }
                    else if (kAdd.pnlClassAddAktive == true)
                    {
                        this.pnlAnzeige.Controls.Remove(kAdd.pnlClassAdd);
                        debCo.writeText("Adding bez. removing the Controls!");

                        kAdd.pnlClassAddAktive = false;
                    }
                    else if (datVer.panelDatenverwaltungAktive == true)
                    {
                        this.pnlAnzeige.Controls.Remove(datVer.pnlDatenwerwaltung);
                        debCo.writeText("Adding bez. removing the Controls!");

                        datVer.panelDatenverwaltungAktive = false;
                    }
                } catch(Exception ex)
                {
                    NoErrors = false;

                    MessageBox.Show("ERRORRRRRRRRRRRRRRRRRRRRRRRRRRR!!!!!!!!!!!!!!!!!!!!!!");
                }

    aber es hat nicht geklappt!

    Sonntag, 18. Dezember 2016 14:28
  • Hallo,

    ich finde deine Beschreibung nicht gerade verständlich.

    In deinem Code legst du zunächst neue Instanzen von Settings, KlassenAdd und Datenverwaltung an und fragst dann Eigenschaften von den neuen Instanzen ab.
    Wenn ich raten müsste würde ich sagen, dass du hier eher bestehende Instanzen abfragen musst.
    Weiterhin versuchst du dann etwas aus den eben neu erstellten Instanzen abzurufen, was vermutlich das Panel ist. Da es sich hierbei vermutlich um andere Instanzen handelt als angezeigt werden, wird auch nichts entfernt.

    Spezifisch weiter helfen kann ich dir mit dem was du gegeben hast nicht. Aber wenn ich raten müsste, würde ich sagen dass der Fehler im neu anlegen von Settings, KlassenAdd und Datenverwaltung liegt. 
    Vielleicht ist es auch noch etwas anderes, aber das Konzept mit den Instanzen von Klassen solltest du dir nochmal verinnerlichen.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 18. Dezember 2016 16:00
  • Also die Inmstansen die ich abfrage sind dafür da das ich erkennen kann ob das Panel gerade verwendent wird oder nicht (true oder false)!

    Und wenn es true ist dann soll er das Panel entfernen!

    Allerdings funktioniert diese Lösung nicht!

    Was ich suche ist das ich das Aktive panel (das ist nicht kenne da es mehrere sind!) zu removen!

    mit ...Remove(PANEL); geht es aber ich kenne ja das panel nicht!

    Montag, 19. Dezember 2016 12:24
  • Hallo,

    weil ich nicht sicher bin, was du eigentlich machen möchtest (ich verstehe es so, dass ein "Main-Panel" existiert, in dem verschiedene "Unter-Panel" angedockt oder angezeigt werden sollen, vielleicht ein Wizard), hier ein eher wager Vorschlag:

    1.) Füge deine instantiierten und konfigurierten Panel zu einer "List<Panel> subPanel" hinzu.

    2.) Beim Klick z.B. auf einen Button löschst du die Controls im pnl_Anzeige: pnl_Anzeige.Controls.Clear()

    3.) Dann fügst du das gewünschte Panel hinzu: pnl_Anzeige.Controls.Add(subPanel[xy]), dockst es an und setzt visible=true

    Das sollte gehen.

    Gruß

    • Als Antwort markiert BNCrazzyCat Dienstag, 20. Juni 2017 10:38
    Dienstag, 20. Dezember 2016 00:57