2017-03-27 17 views
-1

我有這個代碼,我想知道如何刪除我的表單中的所有創建的標籤。如何刪除我的表單上的所有創建的標籤

我試圖把一個Button上的lbl.dispose()和ltr.dispose(),但它說它沒有聲明或不可訪問。

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() 
+1

此代碼不嘗試並刪除任​​何東西。您可以創建一個'ListOf(標籤)',並在每次創建標籤時添加標籤。然後,您可以使用該列表刪除您創建的標籤... – Codexer

回答

2

我喜歡用一個列表(標籤)的Zaggler的想法,但我會用標籤的.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 
+0

Tnx男子。像魅力一樣工作:D –

-2
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 
相關問題