VB.NET控件具有相同的事件处理程序

时间:2013-06-14 01:10:37

标签: vb.net class events methods controls

我的项目中有这个问题。我正在使用带有Visual Basic 2010 Express Edition的Visual Basic编写程序。

我的一个功能是一组控件(确切地说是标签)。它们附带相同的事件处理程序(基本上是鼠标悬停和鼠标单击)。唯一的区别是他们的名字和位置。

有没有简单的方法来写这个?

我有超过200个这样的标签,当我为所有这些标签编写相同的事件处理程序时,它将是一团糟。是否有可以创建的类或模块来总结组控件的类似行为?我该如何使用它?

2 个答案:

答案 0 :(得分:2)

这里有几种技巧可能有用。

首先,考虑将标签添加到列表中。然后你可以用索引来引用它们。

dim mylabels as New List(Of System.Windows.Forms.Label)

myLabels.Add(label1)
myLabels.Add(label2)
'...
myLabels.Add(label200)

您还可以使用System.Windows.Forms.Label.Tag属性来标识每个标签。下面的代码段显示了如何为列表中的标签设置每个标记。

您还可以使用AddHandler命令将每个标签与循环中的处理程序相关联。 这意味着您不必为每个标签硬编码“Handles labelX.Click”。我也在循环中展示了这一点。

For i = 0 To myLabels.Count - 1
    myLabels(i).Tag = i
    AddHandler myLabels(i).Click, AddressOf myLabelsClick
Next

最后,您可以编写公共事件处理程序的代码。在处理程序中,您可以看到哪个标签点击导致处理程序触发,如果需要,您可以按索引引用标签。

Sub MyLabelsClick(ByVal sender As Object, ByVal e As System.EventArgs)

    Dim lbl As System.Windows.Forms.Label = CType(sender, System.Windows.Forms.Label)

    Dim lblNumber As Integer = lbl.Tag

    ' Examples of things you can do

    MsgBox("You clicked Label Number: " & lblNumber)

    lbl.Enabled = False

    myLabels(21).Text = "New Text"
End Sub

答案 1 :(得分:0)

Stack Overflow网站上有很多样本关于此...

所以就这样做:

Sub MyLabelsClick(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles label1.Click, Label2.Click, Label3.Click , ....

    Dim lbl As Label = CType(sender, Label)

    MsgBox(lbl.Text)
End Sub