标签的点击事件

时间:2016-12-11 17:47:49

标签: vb.net labels

我有一个应用程序,我有大约50个标签。在这些标签中,可以看到一个数字。 当用户点击标签时,需要将该号码写入编辑框。 这很好,唯一的问题是我添加了50个函数,如下所示,每次都是相同的。我想知道是否有一个共同的功能 备注:标签名称不同。因此,如果它可能适用于表单上的所有标签。

Private Sub LI_L_Click(sender As Object, e As EventArgs) Handles LI_L.Click
    cmbOBJID.Text = LI_L.Text
End Sub

4 个答案:

答案 0 :(得分:0)

在表单设计器中,您应该能够将每个标签的处理程序设置为相同的函数。然后,您可以使用“sender”参数来确定引发事件的标签。

enter image description here

另请注意,“Handles”关键字后面列出了与函数链接的所有控件。如果您更喜欢使用Visual Studio UI属性网格,这是将代码连接到所有标签的另一种方法。

Private Sub LI_Click(sender As Object, e As EventArgs) Handles Label1.Click, Label2.Click, Label3.Click
    cmdOBJID.Text = DirectCast(sender, Label).Text
End Sub

答案 1 :(得分:0)

虽然很容易以

的方式向一个处理程序添加多个事件
// create a simple doc to place into your new database
Map<String, Object> doc = new HashMap<String, Object>();
doc.put("_id", UUID.randomUUID().toString());
doc.put("season", "summer");
doc.put("climate", "arid");
dbc.create(doc);

不仅仅是几个标签,这将是乏味的。

如果您可以找到一种方法来引用添加处理程序所需的标签,则可以以编程方式添加处理程序。在此示例中,我将所有标签放在名为“GroupBoxOptions”的组框中:

Private Sub LI_Click(sender As Object, e As EventArgs) Handles Label1.Click, Label2.Click, Label3.Click

您可能还有其他方法可以选择使用处理程序的标签。

答案 2 :(得分:0)

只是为了补充 BlueMonkMN 的解决方案: 如果您使用的是 DevExpress Tools,则需要导入 DevExpress.XtraEditors 并将 Label 更改为 LabelControl: DirectCast(sender, LabelControl).Text

这对我有用。

答案 3 :(得分:-1)

一个非常好的快速解决方案是遍历表单上的所有标签控件,通过AddHandler函数指定用户单击标签时要运行的事件。

在代码中:

    For Each c As Control In Me.Controls.OfType(Of Label)
        AddHandler c.Click, AddressOf myLabelClick
    Next

使用流行的代码片段,我们循环到Label类型的所有winform控件。当我们有许多必须为其分配事件的标签时,这样的循环很有用。对于它们中的每一个,我们将控件的事件Click与名为myLabelClick的自定义Sub相关联。该子程序如下所示:

Private Sub myLabelClick(sender As Object, e As EventArgs)
    cmdObjId.Text = DirectCast(sender, Label).Text
End Sub

这里我们使用sender变量(表示已完成点击的控件)来访问其Text属性,并相应地更改cmdObjId.Text。

相关问题