Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 单击动态添加的按钮时如何执行操作_Vb.net_Winforms - Fatal编程技术网

Vb.net 单击动态添加的按钮时如何执行操作

Vb.net 单击动态添加的按钮时如何执行操作,vb.net,winforms,Vb.net,Winforms,我需要在代码中,在运行时动态创建一个新按钮,并将其添加到表单中。当我点击“新建”按钮时,我需要它做一些事情。对于我在设计时在表单上绘制的普通按钮,我只需执行以下操作: Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click Process.Start("") End Sub Private Sub MyClickHandler(sender As Object, e As

我需要在代码中,在运行时动态创建一个新按钮,并将其添加到表单中。当我点击“新建”按钮时,我需要它做一些事情。对于我在设计时在表单上绘制的普通按钮,我只需执行以下操作:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Process.Start("")
End Sub    
Private Sub MyClickHandler(sender As Object, e As EventArgs)
    ' ...
End Sub  
AddHandler myButton.Click, AddressOf MyClickHandler
RemoveHandler myButton.Click, AddressOf MyClickHandler

但是,在这种情况下,当我从另一个按钮的单击事件中创建一个新按钮时,我不知道如何在它被单击时为它分配功能。

创建新控件时,需要将它添加到表单的
控件
集合(或表单上的一个容器控件)。例如:

Dim myButton As New Button()
Me.Controls.Add(myButton)
但是,要捕获和处理click事件,需要声明和事件处理程序方法,然后使用
AddHandler
关键字将其连接起来。例如,如果您有这样一种方法:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Process.Start("")
End Sub    
Private Sub MyClickHandler(sender As Object, e As EventArgs)
    ' ...
End Sub  
AddHandler myButton.Click, AddressOf MyClickHandler
RemoveHandler myButton.Click, AddressOf MyClickHandler
然后,您可以将其添加为按钮的
单击事件的处理程序,如下所示:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Process.Start("")
End Sub    
Private Sub MyClickHandler(sender As Object, e As EventArgs)
    ' ...
End Sub  
AddHandler myButton.Click, AddressOf MyClickHandler
RemoveHandler myButton.Click, AddressOf MyClickHandler
但是,无论何时执行此操作,都应该确保在不再需要处理程序时从事件中删除该处理程序,如下所示:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Process.Start("")
End Sub    
Private Sub MyClickHandler(sender As Object, e As EventArgs)
    ' ...
End Sub  
AddHandler myButton.Click, AddressOf MyClickHandler
RemoveHandler myButton.Click, AddressOf MyClickHandler

VB.NET还提供了方便的
with events
关键字,根据您的需要,该关键字可能更易于使用。

问题不是很清楚,但我认为您正在寻找,例如
AddHandler按钮4。单击,Sub(s,e)Process.Start(“”)
。我已更新了问题,以修复标记,并使您的问题更加明确。然而,由于很难说出你真正的要求,我不得不做出一些假设。如果我以任何方式曲解了你的实际问题,请修改我的编辑。是的,很抱歉我的英语不好。AddHandler正在工作,但它不是永久的。当我创建一个新按钮时,我希望比我重新启动程序时,按钮仍然存在。那可能吗?是的。最简单的方法是将其作为设置/配置存储在文件中,然后每次程序启动时,它都可以加载设置并根据需要动态创建按钮。哇,这是最简单的方法哈哈。按下按钮时,不能仅在代码中添加文本?:/