在我的代码中,我有一个添加按钮,可以将一个单词添加到数组中最多10次。我如何能够创建一个删除按钮,以便能够键入当前标签中的单词并从标签和数组中删除该单词。
注意:要添加到Label,您还必须在TextBox中键入单词,然后单击“添加”按钮。
Public Class Form1
Dim i, j As Integer
Dim s(9) As String
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'working add button
Label1.Text = Nothing
s(j) = TextBox1.Text
For i = 0 To 9
Label1.Text &= s(i) & " "
Next
j += 1
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'attempt at a delete button
s(j) = TextBox1.Text
For i = 0 To 9
If deleteWord = s(j) Then
deleteWord = Nothing
ReDim Preserve s(s.Length - 1)
Label1.Text &= s(i) & " "
End If
Next
j += 1
End Sub
结束班
答案 0 :(得分:0)
解决问题的最简单方法是使用List(Of T)
,因为您只需要执行以下任一操作:
MyList.Remove(deleteWord)
或:
MyList.RemoveAt(<index>)
但是如果你真的想使用数组,你可以使用我已经创建的这种扩展方法。
首先,转到Add New Item
或按CTRL + Shift + A
添加新模块。选择Module
并将其命名为Extensions
。
然后将此扩展方法复制到您的模块中:
Public Module Extensions
<Runtime.CompilerServices.Extension()> _
Public Sub RemoveAt(Of T)(ByRef InputArray As T(), ByVal Index As Integer)
Array.Copy(InputArray, Index + 1, InputArray, Index, (InputArray.Length - 1) - Index)
Array.Resize(InputArray, InputArray.Length - 1)
End Sub
End Module
扩展方法的工作方式如下:它复制自身的子部分(指定索引之后的所有内容),并用它替换要删除的项目。从技术上讲,它将指定索引后的每个项目向左移动一步。 {0, 1, 2, 3} -> {0, 2, 3, <unused>}
然后调整数组大小以删除最后一个未使用的索引。
完成后,您可以在循环中使用这样的扩展方法:
If deleteWord = s(i) Then
s.RemoveAt(i) 'Removes the specified item.
End If
甚至更简单,没有循环:
Dim Index As Integer = Array.IndexOf(s, deleteWord)
If Index > -1 Then
s.RemoveAt(Index)
End If