2014-07-26 90 views
1

我在動態生成控件後無法銷燬所有控件。我用這個來摧毀他們:銷燬控件VB.net

For Each cControl In Me.Controls 
      If (TypeOf cControl Is TextBox) Then 
       Me.Controls.Remove(cControl) 
      End If 
     Next 
     For Each cControl1 In Me.Controls 
      If (TypeOf cControl1 Is CheckBox) Then 
       Me.Controls.Remove(cControl1) 
      End If 
     Next 

我也用cControl.dispose()代替Me.Controls.Remove(cControl)

而不是通過和銷燬所有文本框和複選框,它只會銷燬其他複選框和文本框。如果我切換兩個For循環,它將會是另一種方式。有沒有解決這個問題?一個解釋?解決?

+0

的可能重複[vb.net刪除大量動態創建按鈕(http://stackoverflow.com/questions/10865183/vb-net-deleting-lots-of-dynamically -created-buttons) – Suji

回答

0

當您迭代該集合時,您不應該修改Controls集合。你也可以加入循環。這將解決你的問題:

Dim count As Integer = Me.Controls.Count 

For i As Integer = count -1 to 0 Step -1 
    Dim cControl As Control = Me.Controls(i) 

    If (TypeOf cControl Is CheckBox OrElse TypeOf cControl Is TextBox) Then 
     Me.Controls.Remove(cControl) 
    End If 
Next 
+0

我其實剛剛發現了一個工作,基本上和你的代碼一樣 - 再加上它的作用! For I Integer = Me.Controls.Count - 1 To 0 Step -1 如果(TypeOf Me.Controls(i)是TextBox)或(TypeOf Me.Controls(i)是CheckBox)然後 Me.Controls。 RemoveAt(i) End If Next 我會+1您的回答Alireza,謝謝! –

+0

聰明地使用'RemoveAt'當然。這比我的回答更好:) – Alireza

+0

你的代碼也有一點點錯誤。你定義'cControl',但檢查'cControl1'的類型。 :-) – Jens