动态地将事件处理程序添加到vb.net中的动态面板

时间:2012-03-31 04:02:00

标签: vb.net winforms dynamic

好的,所以我一直在努力争取一些不需要帮助的人,并且需要一些帮助。

所以我有一系列生成的面板

示例:

For i as integer 1 to dt.rows.count
    dim subpan as new panel
    *Code for creating panel"
Next

问题是我需要能够为它们中的每一个添加事件处理程序,包括click,mouseEnter和mouseLeave,但我无法弄清楚如何索引每个面板以便可以访问和识别它们。我尝试使用一个属性,但似乎没有用,或者我做错了。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您需要AddHandler功能:

For i as integer 1 to dt.rows.count 
    dim subpan as new panel 
    subpan.ID = "subpan1"  ' REQUIRED AND MUST BE UNIQUE
    AddHandler subpan.Click, AddressOf subpan1_Click  ' CLICK EVENT HANDLER ALSO UNIQUE
    ' ETC.
Next 

Private Sub subpan1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    ' CODE TO HANDLE CLICK EVENT
End Sub

我应该提到您可以将所有点击事件路由到同一个事件处理程序,除非每个面板都需要自定义逻辑,否则它们不必是唯一的。

答案 1 :(得分:0)

您可以使用AddHandler添加处理程序:

For i As Integer = 1 To dt.Rows.Count
    Dim subpan As New Panel()

    'Code for creating panel

    'Attach events:
    AddHandler subpan.Click, AddressOf Some_Listener
    'etc.
Next

然后,您可以通过将Panel参数转换为sender来访问事件处理程序中的当前Panel