VB.NET 删除主窗体控件的用户控件

VB.NET usercontrols to remove main form controls

我有一个主窗体,它有一个按钮和一个 FlowLayoutPanel。 我还创建了一个 UserControl,其中有一些按钮和其他控件。

当我单击主窗体中的按钮时,它会将我的用户控件添加到面板(与单击的次数一样多):

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    Dim ctrl As New DownloadControls
    FlowLayutPanel1.Controls.Add(ctrl)
End Sub

效果很好。 例如,我已经在主窗体的面板中添加了该 UserControl 的 5 个实例,现在我想使用添加的用户控件 (DownloadControls) 的每个实例上的删除按钮删除其中的任何一个,并保持面板项目的组织。

我怎样才能做到这一点?

无法在您刚刚使用的删除按钮上使用

Yourcontrol.visible = 假

这将隐藏该功能,以便将其删除

您可以为您的用户控件创建一个新的 RemoveClicked 事件,并在用户单击删除按钮时引发它。然后您可以处理该事件您的表单以删除控件。

您的用户控件代码:

Public Event RemoveClicked As EventHandler
Public Sub OnRemoveClicked(e As EventArgs)
    RaiseEvent RemoveClicked(Me, e)
End Sub

Private Sub btnRemove_Click(sender As Object, e As EventArgs) Handles btnRemove.Click
    OnRemoveClicked(EventArgs.Empty)
End Sub

您的表单代码:

Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
    Dim ctrl As New DownloadControls
    AddHandler ctrl.RemoveClicked, AddressOf ctrl_RemoveClicked

    Me.FlowLayutPanel1.Controls.Add(ctrl)
End Sub

Private Sub ctrl_RemoveClicked(sender As Object, e As EventArgs)
    Me.FlowLayutPanel1.Controls.Remove(DirectCast(sender, Control))
End Sub

您可以了解有关处理和引发事件的更多信息:

这在用户控制代码中对我有用:

Private Sub btnClose_Click(sender As Object, e As EventArgs) Handles btnClose.Click
    DirectCast(Me.Parent, FlowLayoutPanel).Controls.Remove(Me)
End Sub