Form zurücksetzen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von sandiro.

    Form zurücksetzen

    Hallo,

    Ich habe eine Form mit zwei Panels und Controls drin,
    beim Öffnen der Form werden zusätzlich Panels und weitere Controls in diesen Panels erstellt.

    Wenn ich die Form nun schliesse und wieder öffne (die Anwendung wird nicht beendet),
    sind die einige Controls weiterhin drin (aber nicht alle neu erstellten). Wie kann ich die Form zurücksetzen, so dass nur die bestehenden 2 Panels drin sind?

    Ich habe schon versucht, alle Controls (For-Schleife) der Form durchzugehen und dann den Namen des Controls zu überprüfen,
    und dann mir Me.Control(Control).Remove zu löschen, aber das funktioniert irgendwie auch nicht...

    Gruss sandiro
    Hallo,

    Also es ist so;
    Über eine XML-Datei kann der User die Felder angeben, welche erscheinen sollen,
    und das Programm liest die Einträge ein und erstellt die Controls.

    Dabei werden die Panels durchnummeriert (pnlField1, pnlField2,...).
    Ich habe nun mal beim Erhöhen dieses Zählers einen Haltepunkt gemacht - und irgendwie stimmt das mit dem Zählen nicht.
    Ich schau mal, wo dort das Problem liegt - und werde ansonsten den Code mal veröffentlichen.

    Gruss sandiro
    Funktioniert ebenfalls nicht,

    Beim Starten der Form sind 2 Panels mit Controls drin, 4 weitere werden noch geladen (funktioniert).
    Danach werden die Controls in den 4 Panels mit Inhalt gefüllt (Text), was ebenfalls funktioniert.

    Aber beim Löschen der Panels durchläuft die Schleife nicht alle Panels,
    obwohl Count = 6
    Hallo,

    die XML-Datei enthält einfach die Angaben zu den Felder.
    Die XML-Datei befindet sich im Anhang als Kommentar


    Wie gesagt, das Erstellen der Controls (also das Auslesen der XML-Datei) funktioniert problemlos.

    Der Code, welcher die Felder erstellt, ist im Anhang.
    Er ist momentan allerdings noch nicht wirklich gut gemacht.
    Dateien
    • Code.txt

      (4,88 kB, 152 mal heruntergeladen, zuletzt: )
    Wenn die Form geöffnet wird, werden die Felder korrekt erstellt,
    eine zweite Funktion liest noch Daten aus einer anderen XML-Datei aus, was ebenfalls korrekt funktioniert.
    Die Daten werden in die Textboxen,... in den 4 Panels geschrieben.

    Wenn ich die Form schliesse und wieder öffne, bleiben einige erstellte Felder bestehen - jedoch nicht alle,
    und das Löschen der Felder funktioniert irgendwie nicht.

    Zwei Panels sind immer in der Form, hier werden nun 4 weitere Panels (mit Controls drin) erstellt.
    Die Anzahl Controls bei der Form zeigt 6 an (was auch richtig ist), beim Durchlaufen der Controls
    werden jedoch nicht alle Controls durchlaufen...
    Wenn ich die Funktion zum Erstellen der Felder mit Einzelschritt durchlaufe,
    werden die Panels richtig benennt (pnlField1, pnlField2,...) (wobei die bestehenden Panels einen anderen Namen haben).
    Und beim Einlesen der Daten sind die Panels ebenfalls noch vorhanden.


    Ich dachte zuerst, dass die Namen nicht korrekt vergeben werden, aber anscheinend schon,
    und die Daten werden ja auch korrekt geladen.

    Gruss sandiro



    EDIT:
    Ich habe die Reset-Funktion (die nun beim Schliessen der Form aufgerufen wird) abgeändert;
    Über eine Do-While Schleife gehe ich die Anzahl Controls in der Form durch, und überprüfe den Namen.
    Ist das Control (Panel) eines der neu erstellen Panel (pnlField + Zahl) wird es gelöscht, ansonsten nicht.

    Damit scheint es zu funktionieren, komisch nur, dass es sonst nicht funktioniert ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „sandiro“ ()

    Evtl. hilft dir folgendes Beispiel weiter.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. Dim ctrl As Control = Nothing
    4. Dim pnlctrl As Control = Nothing
    5. Dim pnl As Panel = Nothing
    6. For Each ctrl In Me.Controls
    7. If TypeOf ctrl Is Panel Then
    8. pnl = CType(ctrl, Panel)
    9. For Each pnlctrl In pnl.Controls
    10. MessageBox.Show(pnlctrl.Name)
    11. Next
    12. Else
    13. MessageBox.Show(ctrl.Name)
    14. End If
    15. Next
    16. End Sub
    17. End Class