从控件列表中删除多个文本框

时间:2014-12-20 13:24:17

标签: vb.net textbox controls

我有一个在控件列表中动态创建的控件列表。用户可以选择在控制列表中添加textboxes并删除它们。

我使用以下代码创建了textboxes

Dim tb As New TextBox
tb.Name = "Textbox" & counter.ToString
tb.Left = 55
tb.Top = fields
Me.Controls.Add(tb)
MyControls.Add(tb)
counter = counter + 1

因此,textbox名称在创建时为Textbox1Textbox2等等,最多为Textbox10

用户可以逐个按钮点击删除textboxes。如果用户想要删除这些textboxes,则counter将向后运行并先删除Textbox10然后再删除Textbox9等等(这与First in First Out中的相同)。

因此,为了删除我尝试了以下代码,但它没有执行,给出错误。代码是在Button的删除按钮的Click事件下编写的。

For Each CType(Me.Controls("Textbox" & counter), TextBox) As Control In MyControls
     Me.Controls.Remove(...) 'The textbox's name to be deleted in place of dots
     'The textbox name to be deleted here with .Dispose()
Next

错误是:"表达式是一个值,因此不能成为作业的目标"在上面代码的第一行。

如何动态删除一系列textboxes

3 个答案:

答案 0 :(得分:1)

此行导致问题:

For Each CType(Me.Controls("Textbox" & counter), TextBox) As Control In MyControls

CType(Me.Controls("Textbox" & counter), TextBox)解析为一个值,因此它不能是循环增量变量。

要基于循环删除,您需要知道要删除多少个控件。这是一种方式:

For i As Integer = 1 To Math.Min(NumberOfControlsToDelete, 10) ' Cap deleting at 10.
    ' Make sure we don't go below 1.
    If counter < 1 Then Continue

    ' Expected that the control will exist.
    Me.Controls.Remove(Controls.Find("TextBox" & counter, True)(0))
    ' Decrement counter.
    counter -= 1
Next

答案 1 :(得分:1)

看起来您已经通过将这些动态按钮添加到列表中来跟踪它们了吗?在这一行(你的第6行代码):

MyControls.Add(tb)

因此,只需抓住最后一个条目并将其删除,无需按名称搜索控件:

    If MyControls.Count > 0 Then
        Dim TB As TextBox = MyControls(MyControls.Count - 1)
        MyControls.Remove(TB)
        TB.Dispose()
    End If

如果您想同时删除所有这些内容:

    For Each TB As TextBox In MyControls
        TB.Dispose()
    Next
    MyControls.Clear()

答案 2 :(得分:0)

这是你正在寻找的吗?我不确定我是否正确地阅读了你的问题。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.Controls.Remove(Me.Controls.Find(""Textbox" & counter"))
End Sub