在自定义控件内的按钮单击中添加逻辑

Add logic inside button click inside a custom control

我正在制作一个如下所示的自定义控件(按钮右侧有一个标签):

我希望用户能够在他的代码中定义按钮的功能,但仍然在用户代码之上的点击事件上执行一些代码。

我要执行的是:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.Button1.Enabled = False
    Label1.ForeColor = Color.Gray
    Label1.Text = "In Progress"

End Sub

那么执行完之后就会触发用户的点击事件

我怎样才能做到这一点?

"the user" 是指使用该用户控件的开发人员,对吗?好吧,最常见的事情是引发下一个开发人员可以用来实现他自己的逻辑的事件。这和你做的完全一样——你使用按钮的点击事件。

基本上,获取您的代码并在下面添加 RaiseEvent

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Me.Button1.Enabled = False
    Label1.ForeColor = Color.Gray
    Label1.Text = "In Progress"

    ' this does not affect your code but provides a "hook" for
    ' other developers
    RaiseEvent OnButtonClick(Button1)

End Sub

现在您需要像这样定义事件本身...

Public Event OnButtonClick(ByVal sender As Control)

...顺便说一句,您可以传递其他内容(或什么都不传递)作为参数。发送按钮作为发件人只是一种习惯。

使用您的用户控件的开发人员可以附加所谓的 "Handler" 以在单击按钮后立即执行代码,例如:

 AddHandler UserControl1.OnButtonClick, AddressOf OnUserControlButtonClick

此代码行只应执行一次,因此通常将其放在 Form_Load 事件中。

现在,在这种情况下,按钮点击被路由到一个名为 OnUserControlButtonClick() 的方法,该方法符合事件的签名:这意味着它有一个参数,即发送者。

Private Sub OnUserControlButtonClick(ByVal sender as Control)
    ' custom logic here ...
End Sub

网上的例子太多了,你可以开始here