我有一个应用程序,我有大约50个标签。在这些标签中,可以看到一个数字。 当用户点击标签时,需要将该号码写入编辑框。 这很好,唯一的问题是我添加了50个函数,如下所示,每次都是相同的。我想知道是否有一个共同的功能 备注:标签名称不同。因此,如果它可能适用于表单上的所有标签。
Private Sub LI_L_Click(sender As Object, e As EventArgs) Handles LI_L.Click
cmbOBJID.Text = LI_L.Text
End Sub
答案 0 :(得分:0)
在表单设计器中,您应该能够将每个标签的处理程序设置为相同的函数。然后,您可以使用“sender”参数来确定引发事件的标签。
另请注意,“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。