|
分類:[.NET 全般]
.NET 3.5
パネルコントロール内の子クラスを解放します。 この際に、For Each文でPanel.Controlsを処理すると、1個とびに処理され、上手く全件が処理できません。
Private sub addObj() For i = 0 To 99 Dim obj = New ClassA obj.Name = i Panel.Controls.Add(obj) Next i End Sub
Private sub delObj() For Each obj As ClassA In Panel.Controls obj.Dispose() Console.Writeline(obj.Name) '←処理されるのは0,2,4,6,8...と一個飛びです。 Next Panel.Controls.Clear() End Sub
下記のように、そもそもFor Eachを使わず適当に書けば回避はできるので、解決はしているのですが。。 ただ、For Each文がどうにも気持ち悪い動きです(Disposeしているのが原因だとは思うのですが)。 Nextステートメントを使わない、など何か方法があったり、私が勘違いしている部分があればお知恵をお貸しいただけないでしょうか。
Private sub delObj() Dim i As Integer = 0 Do Until i = Panel.Controls.Count Dim obj As ClassA = Panel.Controls.Count(i) obj.Dispose() Console.Writeline(obj.Name) '←処理されるのは0,1,2,3,4...と正常です。 Loop Panel.Controls.Clear() End Sub
|