.net flowlayoutpanel动态控件自动订阅事件处理程序

.net flowlayoutpanel动态控件自动订阅事件处理程序,.net,winforms,.net,Winforms,我想知道是否有更有效的方法订阅动态控件事件处理程序,例如在使用flowlayoutpanel和动态添加控件时单击鼠标 我在flowlayoutpanel上发现了这些小宝石作为属性的一部分 private void FlowLayoutPanelItemButtons_ControlAdded(object sender, ControlEventArgs e) { } 及 可能吗?使用这些代码不会让代码更干净吗?这是否有助于解决可能出现的内存泄漏(例如,在卸下动态控件时) 我发现了一个工作示例

我想知道是否有更有效的方法订阅动态控件事件处理程序,例如在使用flowlayoutpanel和动态添加控件时单击鼠标

我在flowlayoutpanel上发现了这些小宝石作为属性的一部分

private void FlowLayoutPanelItemButtons_ControlAdded(object sender, ControlEventArgs e)
{
}

可能吗?使用这些代码不会让代码更干净吗?这是否有助于解决可能出现的内存泄漏(例如,在卸下动态控件时)

我发现了一个工作示例,看起来像这样,但由于某些原因似乎不起作用

private void flowLayoutPanel1_ControlRemoved(object sender, ControlEventArgs e)
{
    e.Control.Click -= flowLayoutPanel1_ControlClicked;
}

注意:我实际上使用的是vb.net,为了方便起见,我刚刚转换为c#

您在第三个代码块中显示的是删除事件处理程序。您是否首先添加了它(在
\u ControlAdded
下)?如果没有,你需要这样做。使用
e.Control.Click+=flowLayoutPanel1\u ControlClicked。或者,如果您正在使用VB:
AddHandler e.Control.Click,则flowLayoutPanel1\u Control的地址已单击
(并使用
RemoveHandler
将其删除)。请注意,您不必为了提问而将代码转换为C。只需发布您的VB代码并标记您的问题[VB.net]。在SO上有很多VB程序员,也有很多C#程序员知道VB。从我之前的评论中可以看出,在某些方面,语法可能会有所不同,如果您不知道这些不同,可能会导致您的混淆。和@41686d6564的副本只是将其用作示例,因此如果您想订阅在运行时创建的FLP子控件的事件,则没有实际代码,
ControlAdded
是取消订阅的方法(当然还有
ControlRemoved
)。您是否首先添加了它(在
\u ControlAdded
下)?如果没有,你需要这样做。使用
e.Control.Click+=flowLayoutPanel1\u ControlClicked。或者,如果您正在使用VB:
AddHandler e.Control.Click,则flowLayoutPanel1\u Control的地址已单击
(并使用
RemoveHandler
将其删除)。请注意,您不必为了提问而将代码转换为C。只需发布您的VB代码并标记您的问题[VB.net]。在SO上有很多VB程序员,也有很多C#程序员知道VB。从我之前的评论中可以看出,在某些方面,语法可能会有所不同,如果您不知道这些不同,可能会导致您的混淆。和@41686d6564的副本只是将其用作示例,因此如果您想订阅在运行时创建的FLP子控件的事件,则没有实际代码,
ControlAdded
是一种方法(当然,
ControlRemoved
取消订阅)。
private void flowLayoutPanel1_ControlRemoved(object sender, ControlEventArgs e)
{
    e.Control.Click -= flowLayoutPanel1_ControlClicked;
}