行の配列があり、ある時点でそれらの一部を消去したいと考えています。コードのサンプルを次に示します。
Dim canvas As New Microsoft.VisualBasic.PowerPacks.ShapeContainer
Dim lines(20) As PowerPacks.LineShape
Dim it As Integer = 0
Private Sub GoldenSpi_Load(sender As Object, e As EventArgs) Handles MyBase.Load
canvas.Parent = Me
lines.Initialize()
iter.Text = 0
End Sub
Private Sub iter_TextChanged(sender As Object, e As EventArgs) Handles iter.TextChanged
If (it > iter.Text And iter.Text <> 0) Then
ReDim Preserve lines(iter.Text - 1)
End If
If (it <> iter.Text) Then
it = iter.Text
End If
For i As Integer = 1 To iter.Text
lines(i - 1) = New PowerPacks.LineShape(canvas)
lines(i - 1).StartPoint = pA(i)
lines(i - 1).EndPoint = pB(i)
lines(i - 1).BringToFront()
Next
End Sub
プログラムを実行すると、線が作成されます。しかし、変数「it」よりも小さい値をテキストボックスに与えると、残りの行ではなく最後の行が削除されます。また、デバッグ中に配列のサイズが縮小されていることがわかりました。ということは、サイズを超えた内容はまだ保持されているということですか?何故ですか?。どんな助けでも大歓迎です。ありがとう。
編集:次のようにリストを作成しようとしました:
Dim lines As New Generic.List(Of PowerPacks.LineShape)
Private Sub iter_ValueChanged(blabla) Handles iter.ValueChanged
If (it > iter.Value And iter.Value <> 0) Then
lines.RemoveRange(iter.Value - 1, lines.Count - iter.Value)
End If
For i As Integer = 1 To iter.Value
InitPoints()
If i - 1 = lines.Count Then
Dim line As New PowerPacks.LineShape
With line
.StartPoint = pA(i)
.EndPoint = pB(i)
.BringToFront()
.Parent = canvas
End With
lines.Add(line)
End If
Next
End Sub
しかし、それでも線はフォームに表示されます。デバッグしたところ、リストのサイズが減少したことがわかりました。私が配列を持っていたときと同じ問題。何が起こっているのですか?...