Alle Controls bestimmten Typs entfernen / bearbeiten / etc

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von mietzekotze.

    Alle Controls bestimmten Typs entfernen / bearbeiten / etc

    Hallo,

    ich denke die Überschrift erklärt alles. Ich möchte (in diesem konkreten Fall) dynamisch hinzugefügte Labels von der Form löschen.
    Ich habe diesen Code probiert:

    VB.NET-Quellcode

    1. For Each Label As Label In Me.Controls
    2. 'code
    3. Next


    aber der klappt leider nicht.


    Hoffe mir kann jemand helfen :D

    Liebe Grüße,
    mietzekotze

    VB.NET-Quellcode

    1. For Each contr as Control in Me.Controls
    2. If TypeOf contr is Label Then
    3. 'bla
    4. End If
    5. Next
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Komischerweise löscht der nicht alle labels. Hab jetzt den Quelltext:

    VB.NET-Quellcode

    1. For Each contr As Control In Me.Controls
    2. If TypeOf contr Is Label AndAlso contr.Name IsNot "lblExit" Then
    3. Me.Controls.Remove(contr)
    4. End If
    5. Next


    lblExit ist mein Schliessen-Knopf, der soll also nicht weg, aber irgendwie werden von den dynamisch angelegten Labels nur jedes zweite gelöscht.

    VB.NET-Quellcode

    1. Public Sub AddText(ByVal Text As String, ByVal Y As Double, ByVal Size As Integer, ByVal Steps As Integer, ByVal WaitFor As Boolean)
    2. Dim lbltest As Label
    3. lbltest = New Label
    4. With lbltest
    5. .AutoSize = True
    6. .Text = Text
    7. .ForeColor = Color.FromArgb(64, 64, 64)
    8. mainFrm.Controls.Add(lbltest)
    9. .Left = (mainFrm.Width - .Width) / 2
    10. .Location = New Point(.Left - .Width / 2, Y)
    11. .Font = New Font("Calibri", Size)
    12. End With
    13. End Sub


    Liegt das vielleicht daran, dass die alle keinen Namen haben?
    As Myrax said

    VB.NET-Quellcode

    1. For Each contr As Control In Me.Controls
    2. If TypeOf contr Is Label Then
    3. list.Add(contr)
    4. End If
    5. Next
    6. For Each item As Control In list
    7. If item.Name <> "exitlbl" Then
    8. Me.Controls.Remove(item)
    9. End If
    10. Next
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Jetzt wird sich hier schon wieder um Millisekunden gefetzt :S Wenn es nicht gerade 2500 Labels sind, dürfte das keine großartige Rolle spielen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    Geht auch einfacher: lese die Controls Collection per Index vom Ende bis zum Anfang:

    VB.NET-Quellcode

    1. For i As Integer = Me.Controls.Count - 1 To 0 Step -1
    2. If TypeOf (Controls(i)) Is Label Then Controls.RemoveAt(i)
    3. Next


    @Effizient noch rechtzeitig gemerkt dass es mit einer Vorwärts-Schleife nicht geht ? :rolleyes: