从一个面板中删除所有按钮

时间:2014-04-16 16:07:33

标签: vb.net

我的按钮上有以下步骤,在面板上为我的数据库中的每个项目添加一个按钮。我想要添加到该过程的是从面板中删除除名为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

2 个答案:

答案 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不会丢弃这些控件。