在 VB(.NET) 中在运行时动态添加代码
Dynamically add code at runtime in VB(.NET)
我想在 VB(.NET) 中制作一个程序,在该程序中,每次单击一个按钮,一个或多个新按钮就会添加到用户窗体中。这个过程应该工作无限次。然后按钮将调用一个 public sub,移交一个单独的变量,以便代码知道它是从哪个按钮调用的(因此:知道要做什么)。
我在 运行 时学会了如何使用 Button = new Button
和 controls.add(Button)
代码创建按钮。我还设法通过使用 WithEvents
或 AddHandler
将新代码传递给按钮。但是直到现在我总是需要在程序运行之前准备好代码。 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
我想在 VB(.NET) 中制作一个程序,在该程序中,每次单击一个按钮,一个或多个新按钮就会添加到用户窗体中。这个过程应该工作无限次。然后按钮将调用一个 public sub,移交一个单独的变量,以便代码知道它是从哪个按钮调用的(因此:知道要做什么)。
我在 运行 时学会了如何使用 Button = new Button
和 controls.add(Button)
代码创建按钮。我还设法通过使用 WithEvents
或 AddHandler
将新代码传递给按钮。但是直到现在我总是需要在程序运行之前准备好代码。 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