Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.net中销毁控件_.net_Vb.net_Controls_Destroy - Fatal编程技术网

在VB.net中销毁控件

在VB.net中销毁控件,.net,vb.net,controls,destroy,.net,Vb.net,Controls,Destroy,在动态创建控件之后,我很难销毁所有控件。我用这个来摧毁他们: 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 (Ty

在动态创建控件之后,我很难销毁所有控件。我用这个来摧毁他们:

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)


它不会遍历并销毁所有文本框和复选框,只会销毁其他复选框和文本框。如果我把这两个换成循环的话,结果会是相反的。有解决办法吗?解释?解决方法?

在迭代该集合时,不应修改
控件。你可以加入太循环。这将解决您的问题:

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

实际上,我刚刚发现了一个可能的副本,它基本上与您的代码做的事情相同——而且它也能工作!对于i As Integer=Me.Controls.Count-1到0步骤-1如果(type of Me.Controls(i)是TextBox)或(type of Me.Controls(i)是CheckBox),那么Me.Controls.RemoveAt(i)结束如果下一步我将+1你的答案Alireza,谢谢!当然,巧妙地使用
RemoveAt
。这比我的答案要好:)您的代码中也有一点错误。您可以定义
cControl
,但要检查
cControl的类型1
:-)哦我要自杀了:-谢谢你告诉我:)