如何删除我的表单上所有创建的标签

How to remove all created labels on my form

我有这段代码,我想知道如何删除我表单中所有创建的标签。

我试图将 lbl.dispose() 和 ltr.dispose() 放在 Button 上,但它说它未声明或不可访问。

Dim break As Integer = 99


            For i = 0 To break

            If jobA > 0 And jobA > time Then
                jobA = jobA - time
                Dim lbl As Label = New Label
                Dim ltr As Label = New Label
                lbl.Location = New System.Drawing.Point(x, 280)
                lbl.Size = New System.Drawing.Point(20, 20)
                lbl.Text = time + spudow(waifuu)
                ltr.Location = New System.Drawing.Point(y, 250)
                ltr.Size = New System.Drawing.Point(20, 20)
                ltr.Text = "A"
                Me.Controls.Add(lbl)
                Me.Controls.Add(ltr)

            ElseIf jobA > 0 And jobA < time Then
                Dim lbl As Label = New Label
                Dim ltr As Label = New Label
                lbl.Location = New System.Drawing.Point(x, 280)
                lbl.Size = New System.Drawing.Point(20, 20)
                lbl.Text = jobA + spudow(waifuu)
                ltr.Location = New System.Drawing.Point(y, 250)
                ltr.Size = New System.Drawing.Point(20, 20)
                ltr.Text = "A"
                Me.Controls.Add(lbl)
                Me.Controls.Add(ltr)

            ElseIf jobA = time Then
                Dim lbl As Label = New Label
                Dim ltr As Label = New Label
                lbl.Location = New System.Drawing.Point(x, 280)
                lbl.Size = New System.Drawing.Point(20, 20)
                lbl.Text = jobA + spudow(waifuu)
                ltr.Location = New System.Drawing.Point(y, 250)
                ltr.Size = New System.Drawing.Point(20, 20)
                ltr.Text = "A"
                Me.Controls.Add(lbl)
                Me.Controls.Add(ltr)

            End If

  Me.Refresh()
Sub RemoveAllLabels()
    Dim Labels As New List(Of Label)
    Dim Stack As New Stack(Of Control)
    Stack.Push(Me)
    While Stack.Count > 0
      Dim Ctrl As Control = Stack.Pop()
      Labels.Add(TryCast(Ctrl, Label))
      For Each C As Control In Ctrl.Controls
        Stack.Push(C)
      Next
    End While
    For Each L As Label In Labels
      If Not IsNothing(L) Then L.Dispose()
    Next
End Sub

我喜欢 Zaggler 使用 List(Of Label) 的想法,但我将 post 另一种使用标签的 .Tag 属性 的方法。如果所有标签都只添加到表单本身,这将工作得很好。如果您要将标签分布在多个容器中,请改用 List(Of Label) 方法,因为它会更容易。此外,您可以通过这样的重组来摆脱大量冗余代码(我假设有更多未显示的代码以某种方式改变 "x" 和 "y" 值!):

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim break As Integer = 99
    For i = 0 To break

        Dim lbl As Label = New Label
        Dim ltr As Label = New Label
        lbl.Tag = "dynamic"
        ltr.Tag = "dynamic"
        lbl.Location = New System.Drawing.Point(x, 280)
        lbl.Size = New System.Drawing.Point(20, 20)
        lbl.Text = ""
        ltr.Location = New System.Drawing.Point(y, 250)
        ltr.Size = New System.Drawing.Point(20, 20)
        ltr.Text = "A"

        If jobA > 0 Then
            If jobA > time Then
                jobA = jobA - time
                lbl.Text = time + spudow(waifuu)
            ElseIf jobA < TimeOfDay Then
                lbl.Text = jobA + spudow(waifuu)
            End If
        ElseIf jobA = time Then
            lbl.Text = jobA + spudow(waifuu)
        End If

        If lbl.Text <> "" Then
            Me.Controls.Add(lbl)
            Me.Controls.Add(ltr)
        End If

    Next i
End Sub

然后,当你想删除动态标签时,你可以使用这样的代码:

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim labels = Me.Controls.OfType(Of Label).Where(Function(x) x.Tag = "dynamic").ToList
    For Each lbl As Label In labels
        lbl.Dispose()
    Next
End Sub