我有一系列线条,我想在某些时候删除它们中的一些。 以下是代码示例:
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'时,它只删除最后一行而不是其余行。我也在调试时看到了数组的大小减少了。这意味着超出尺寸的内容仍然保留?这是为什么?。任何帮助表示赞赏。感谢。
编辑:我试图像这样创建List:
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
但是线条在表格中仍然可见。我调试了它,发现列表大小减少了。当我有一个数组时同样的问题。怎么回事?...
答案 0 :(得分:1)
我建议将iter.Text
更改为cint(iter.Text)
,因为有可能将这两个值作为文本进行比较(比较不同)。
我还建议将Dim lines(20) As PowerPacks.LineShape
更改为Dim lines As new generic.list(of PowerPacks.LineShape)
这样你就不必担心ReDim Preserve
(当你在循环中这样做时可能会很慢),如果你想要,你可以轻松地将项目插入任何索引
答案 1 :(得分:0)
您应该在项目中使用Option Strict On
,以避免类型之间的隐式转换,这会导致错误或更糟糕的意外行为。
另一方面,除非有需要,否则不应该有TextBox
来存储号码。例如,使用NumericUpDown
。看看MSDN Documentation。
现在,对于数组,我建议使用List,它具有您需要处理元素的所有方法,并且具有.ToArray()
方法,该方法将为您提供数组需要的。
尝试这样的事情:
Dim it As Integer = 0
Dim lines As New List(Of PowerPacks.LineShape)()
Sub iter_TextChanged(sender As Object, e As EventArgs) Handles iter.TextChanged
Dim iTxt As Integer
Try
iTxt = Integer.Parse(iter.Text)
If it > iTxt AndAlso iTxt <> 0 Then
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
我打算给你写一个例子,但我意识到我并不确切地知道你要做什么。你能解释一下吗?