在自定义控件内部按钮内添加逻辑

时间:2017-08-03 20:39:50

标签: vb.net winforms events user-controls

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

我希望用户能够定义按钮在其代码中的功能,但仍然可以在用户代码顶部的click事件上执行一些代码。

我想要执行的内容:

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

然后执行此操作后,将触发用户的点击事件。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

对于“用户”,您指的是使用该用户控件的开发人员,对吧?嗯,最常见的事情是提出一个事件,下一个开发人员可以使用它来实现自己的逻辑。这与您完全一样 - 您使用按钮的Click-Event。

基本上,请使用您的代码并添加下面的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)

...顺便说一下,你可以传递其他东西(或者根本没有)作为参数。将按钮作为发件人发送只是一种习惯。

使用您的用户控件的开发人员可以在单击按钮后附加所谓的“处理程序”以实现代码,例如:

 AddHandler UserControl1.OnButtonClick, AddressOf OnUserControlButtonClick

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

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

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

网络上有很多例子,你可以开始here