【问题标题】:How to do something when a dynamically added button is clicked [duplicate]单击动态添加的按钮时如何做某事[重复]
【发布时间】:2016-09-23 10:35:00
【问题描述】:

我需要在代码中在运行时动态创建一个新按钮并将其添加到我的表单中。当我单击新按钮时,我需要它来做一些事情。对于我在设计时在表单上绘制的普通按钮,我会做这样的事情:

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    Process.Start("")
End Sub    

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

【问题讨论】:

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

标签: vb.net winforms


【解决方案1】:

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

Dim myButton As New Button()
Me.Controls.Add(myButton)

但是,要捕获和处理单击事件,您需要声明事件处理方法,然后使用AddHandler 关键字将其连接起来。例如,如果你有这样的方法:

Private Sub MyClickHandler(sender As Object, e As EventArgs)
    ' ...
End Sub  

然后您可以将其添加为按钮的Click 事件的处理程序,如下所示:

AddHandler myButton.Click, AddressOf MyClickHandler

但是,无论何时执行此操作,都应确保在不再需要处理程序时将其从事件中删除,如下所示:

RemoveHandler myButton.Click, AddressOf MyClickHandler

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多