如何公开,提高自定义事件的vb.net的WinForms用户控件(How to expose and

2019-09-17 14:37发布

请阅读此文章。 我有同样的问题,因为在这个职位描述,但我试图做在VB.net而不是C#。

我敢肯定,要做到这一点我必须使用自定义事件。 (我用一个编码转换的网站去了解自定义事件。)所以在IDE当我键入以下内容:

公共自定义事件AddRemoveAttendees作为事件处理

它扩展到下面的代码片段。

Public Custom Event AddRemoveAttendees As EventHandler
    AddHandler(ByVal value As EventHandler)

    End AddHandler

    RemoveHandler(ByVal value As EventHandler)

    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)

    End RaiseEvent
End Event

但我无法弄清楚如何处理它。 直到今天,我从来没有听说过的自定义事件。

我想要的东西的底线是有一个按钮泡沫的单击事件由用户控制的容器中。 我知道我可以总结我自己的事件,但我至少想了解自定义事件我走的更远这条道路之前。

赛斯

Answer 1:

要使用自定义事件冒泡另一个控件的事件,你可以这样做:

Public Custom Event AddRemoveAttendees As EventHandler
    AddHandler(ByVal value As EventHandler)
        AddHandler _theButton.Click, value
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler _theButton.Click, value
    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        ' no need to do anything in here since you will actually '
        ' not raise this event; it only acts as a "placeholder" for the '
        ' buttons click event '
    End RaiseEvent
End Event

AddHandlerRemoveHandler你只是传播的呼叫连接或从控制的删除给定的事件处理程序/ Click事件。

为了扩大对使用自定义事件了一下,这里是一个自定义事件的另一个样本实施:

Dim _handlers As New List(Of EventHandler)
Public Custom Event AddRemoveAttendees As EventHandler

    AddHandler(ByVal value As EventHandler)
        _handlers.Add(value)
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        If _handlers.Contains(value) Then
            _handlers.Remove(value)
        End If
    End RemoveHandler

    RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
        For Each handler As EventHandler In _handlers
            Try
                handler.Invoke(sender, e)
            Catch ex As Exception
                Debug.WriteLine("Exception while invoking event handler: " & ex.ToString())
            End Try
        Next
    End RaiseEvent
End Event

现在,因为它看起来上面,它比普通的事件声明没有别的:

Public Event AddRemoveAttendees As EventHandler

它提供了一个类似的机制,允许事件处理程序的附接和移除,并且用于待引发的事件。 什么是自定义事件增加是控制的一个额外的水平; 你写周围的一些代码的添加,移除和引发事件,您可以在其中执行规则,并调整会发生什么一点点。 例如,您可能希望限制连接到您的事件的事件处理程序的数量。 为了实现这一目标,你可以改变AddHandler从上面的示例部分:

    AddHandler(ByVal value As EventHandler)
        If _handlers.Count < 8 Then
            _handlers.Add(value)
        End If
    End AddHandler

如果你不需要那种细致的控制,我认为没有必要宣布自定义事件。



Answer 2:

如果你想同样的事情在其他岗位你mentionned,这里的VB.NET相当于:

Public Custom Event AddRemoveAttendees As EventHandler

    AddHandler(ByVal value As EventHandler)
        AddHandler SaveButton.Click, value
    End AddHandler

    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler SaveButton.Click, value
    End RemoveHandler

End Event

但我不认为这是一个好主意,因为sender上述事件的参数将是Button ,不是你的UserControl ...

相反,你可以订阅Button.Click事件,并提高你自己的事件(没有明确的存取)



文章来源: How to expose and raise custom events for a vb.net winforms user control