如何删除我的表单上所有创建的标签
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
我有这段代码,我想知道如何删除我表单中所有创建的标签。
我试图将 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