在 VB(.NET) 中在运行时动态添加代码

Dynamically add code at runtime in VB(.NET)

我想在 VB(.NET) 中制作一个程序,在该程序中,每次单击一个按钮,一个或多个新按钮就会添加到用户窗体中。这个过程应该工作无限次。然后按钮将调用一个 public sub,移交一个单独的变量,以便代码知道它是从哪个按钮调用的(因此:知道要做什么)。

我在 运行 时学会了如何使用 Button = new Buttoncontrols.add(Button) 代码创建按钮。我还设法通过使用 WithEventsAddHandler 将新代码传递给按钮。但是直到现在我总是需要在程序运行之前准备好代码。 IE。我需要提前知道按钮的名称并准备好代码。

有没有一种方法可以动态创建在 运行 时间截断的代码,该代码将指向一个预先存在的代码?

我给你举个简单的例子:

WithEvents NewButton01 As New Button
WithEvents NewButton02 As New Button
WithEvents NewButton03 As New Button

Private Sub AddNewButton_Click() Handles AddNewButton.Click

    NewButton01.Location = New Point(10, 10)
    NewButton01.Text = "01"
    Controls.Add(NewButton01)

    NewButton02.Location = New Point(50, 50)
    NewButton02.Text = "02"
    Controls.Add(NewButton02)

    NewButton03.Location = New Point(90, 90)
    NewButton03.Text = "03"
    Controls.Add(NewButton03)

End Sub

Private Sub NewButton01_click() Handles NewButton01.Click
    Call MessageBox(1)
End Sub

Private Sub NewButton02_click() Handles NewButton02.Click
    Call MessageBox(2)
End Sub

Private Sub NewButton03_click() Handles NewButton03.Click
    Call MessageBox(3)
End Sub

Private Sub MessageBox(flag As Integer)
    MsgBox("You activated button number " & flag)
End Sub

如您所见,这是一种非常不专业的编码方式。另外,我想保持无限创建的按钮数量,所以我不能使用这段代码。我宁愿让 VB 每次单击 "AddNewButton" 时都创建一个新按钮并编写引用 Private Sub MessageBox 或最后可能是什么代码的代码。

我是VB.Net的新手,所以如果例子中有任何让你发抖的地方,请原谅我。

非常感谢!

这样的事情可能会有所帮助:

    Private Sub AddNewButton_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim lastButtonPos As Integer = 10
        For i = 1 To 3
            Dim NewButton As New Button
            NewButton.Location = New Point(lastButtonPos, lastButtonPos)
            NewButton.Text = "0" & i.ToString
            NewButton.Name = i.ToString
            AddHandler NewButton.Click, AddressOf Button_click
            Controls.Add(NewButton)
            lastButtonPos = lastButtonPos + 40
        Next

    End Sub

    Private Sub Button_click(ByVal sender As Object, ByVal e As EventArgs)
        Dim clickedButton As Button = CType(sender, Button)
        Dim clickedNumber As Integer = clickedButton.Name
        Call MessageBox(clickedNumber)
    End Sub

    Private Sub MessageBox(flag As Integer)
        MsgBox("You activated button number " & flag)
    End Sub