Alle Controls in einem FlowLayoutPanel löschen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Alle Controls in einem FlowLayoutPanel löschen

    Hallo,

    ich möchte alle in einem FlowLayoutPanel enthaltenen Controls löschen.
    Versucht habe ich es mit:

    VB.NET-Quellcode

    1. For Each picbox As Control In FlowLayoutPanel1.Controls
    2. FlowLayoutPanel1.Controls.Remove(picbox)
    3. Next


    Doch damit löscht er nur die Hälfte der Controls.
    Ich habe auch schon folgendes probiert:

    VB.NET-Quellcode

    1. For Each picbox As Control In FlowLayoutPanel1.Controls
    2. i = i + 1
    3. Next


    Damit erhalte ich für i die korrekte Anzahl.
    Wenn ich dann in einer zweiten Schleife über den Index die Controls löschen möchte:

    VB.NET-Quellcode

    1. For i2 = 0 To i - 1
    2. FlowLayoutPanel1.Controls.RemoveAt(i2)
    3. Next


    Dann geht er wieder bis zur Hälfte und sagt danach: Der Index x liegt außerhalb des Bereichs.
    Danach ist aber die verbleibende Hälfte der Controls nach wie vor in dem Panel und wird auch angezeigt.
    Was mache Ich hier falsch?
    Hat FlowLayoutPanel.Controls nicht eine Clear-Methode?
    Übrigens: Wenn die Controls nirgendwo sonst verwendet werden (also nach dem Entfernen aus dem FlowLayoutPanel im Nirvana landen), solltest Du vorher alle disposen:

    VB.NET-Quellcode

    1. For Each i In FlowLayoutPanel1902471208712084391824.Controls
    2. i.Dispose()
    3. Next
    4. FlowLayoutPanel1902471208712084391824.Controls.Clear()

    Noch übrigenser: Gib den Controls sinnvolle Namen. Niemand kann sich merken, wofür nochmal TextBox14 da ist ;)

    Edit: War zu langsam.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Du musst die Dinger von hinten löschen oder immer den mit dem Index 0, da die Controls intern "nachrutschen" :D

    VB.NET-Quellcode

    1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    2. Dim FlowLayoutPanel1 As New FlowLayoutPanel
    3. For i = 1 To 10
    4. FlowLayoutPanel1.Controls.Add(New Button)
    5. Next
    6. Debug.WriteLine(FlowLayoutPanel1.Controls.Count.ToString)
    7. For i = FlowLayoutPanel1.Controls.Count - 1 To 0 Step -1
    8. 'FlowLayoutPanel1.Controls.RemoveAt(i)
    9. FlowLayoutPanel1.Controls.RemoveAt(0)
    10. Next
    11. Debug.WriteLine(FlowLayoutPanel1.Controls.Count.ToString)
    12. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi, vielen Dank an alle.
    Wieder etwas dazugelernt.

    Nur aus reiner Neugier:

    @Niko Ortner: Wie hast du aus meinem Posting herausgelesen wie ich die Controls benenne?????
    EDIT: Vergiss es... ich glaube du meintest das FlowLayoutPanel, nicht die controls darin.
    Das ist z.Z. ein reines Test-Spielobjekt, das bekommt später noch seinen "richtigen" Namen.... ;)

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

    @stepper71: Ja, ich hab das FlowLayoutPanel1 gesehen und darauf geschlossen, dass alle Controls so benannt sind.
    Mal rein interessehalber: Hab ich richtig gelegen?
    Bei einem Testprojekt ist das natürlich OK. Nur sieht man das so oft, dass man schon Abwehrreflexe gebildet hat :D
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    stepper71 schrieb:

    Bildervorschau
    Sieh Dir mal ImageList an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!