我的按钮上有以下步骤,在面板上为我的数据库中的每个项目添加一个按钮。我想要添加到该过程的是从面板中删除除名为btnAddItemName
之外的所有先前现有控件。我不知道如何做到这一点。我可以添加控件,删除并清除所有控件,但不能如何进行异常。以下是我到目前为止的情况:
Private Sub btnCategory_Click(sender As Object, e As EventArgs) Handles btnCategory.Click
Dim source As DataTable = ItemInventoryControlTableAdapter.GetData
For Each row As DataRow In source.Rows
Dim btn As New InventoryItemButton()
btn.Name = DirectCast(row("ItemName"), String)
btn.Text = btn.Name
'Assign the click event to each button
AddHandler btn.Click, AddressOf handleItemButton
'Add button to the item panel
flpItem.Controls.Add(btn)
Next
End Sub
答案 0 :(得分:1)
尝试:
flpItem.Controls.OfType(Of Button).Except({btnAddItemName}).ToList().ForEach(Sub(btn As Button) btn.Dispose())
这将获得List
类型Button
,包括面板中的所有按钮( flpItem ),但需要的按钮除外( btnAddItemName ),然后遍历每个List
的{{1}}和Dispose
。
简化:
Button
或者:
flpItem.Controls.OfType(Of Button).Except({btnAddItemName}).ToList().ForEach(AddressOf RemoveButton)
Sub RemoveButton(btn As Button)
btn.Dispose()
End Sub
答案 1 :(得分:0)
尝试将按钮隔离到列表中,然后向后遍历列表以避免弄乱索引位置:
Dim buttons() As Button = flpItem.Controls.OfType(Of Button)().ToArray
For i As Integer = buttons.Length - 1 To 0 Step -1
If buttons(i).Name <> btnAddItemName.Name Then
buttons(i).Dispose()
End If
Next
注意:调用flpItem.Controls.Clear不会丢弃这些控件。