我正在尝试为餐馆制作一个程序,允许他们在程序中添加和删除表格。 我的想法是有一个名为“添加表”的按钮,它会生成一个按钮,其名称为表号,新创建的按钮将包含一个函数或子函数(我还不太确定,正在进行中)
问题是我已经找到了如何动态添加按钮,但我对AdressOf部分感到困惑。
我是否需要使用adressOf部分链接所需的方法或以其他方式完成的方法?
Public Class Form_Create_Button
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
CreateButton(TextBox1.Text, TextBox2.Text)
End Sub
Private Sub CreateButton(TableNr As String, PersonNr As String)
Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
AddHandler Button.Click, AddressOf '...
Main_Form.GroupBox1.Controls.Add(Button)
End Sub
结束班
答案 0 :(得分:4)
您可以使用AddressOf
operato r以编程方式添加事件处理程序。因此,您可以为所有按钮使用一个处理程序。您可以使用Sender
参数来识别按钮:
Private Sub CreateButton(TableNr As String, PersonNr As String)
Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
AddHandler Button.Click, AddressOf TableClicked
Main_Form.GroupBox1.Controls.Add(Button)
End Sub
Private Sub TableClicked(sender As Object, e As EventArgs )
Dim button = DirectCast(sender, Button)
Dim tableNumber As String = button.Name.Substring(6)
' ...
End Sub
答案 1 :(得分:0)
您担心在AddHandler
中使用相同的方法,然后在调用该方法时,您需要知道单击了哪个按钮。这是事件处理程序中的sender
参数:
Private Sub CreateButton(TableNr As String, PersonNr As String)
Dim Button As New Button With {.Left = 10, .Top = 10, .Text = TableNr, .Name = "Button" & TableNr}
AddHandler Button.Click, AddressOf Table_Click
Main_Form.GroupBox1.Controls.Add(Button)
End Sub
Private Sub Table_Click(sender As Object, e As EventArgs)
Dim button As Button = TryCast(sender, Button)
'...
End Sub
他们唯一缺少的是PersonNr和TableNr数据,但此时它应该很容易将它们自己附加到按钮上。如果你需要推送,一个选项是从带有这些附加字段的按钮继承你自己的控件。