我有一个在控件列表中动态创建的控件列表。用户可以选择在控制列表中添加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
名称在创建时为Textbox1
,Textbox2
等等,最多为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
答案 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