简体   繁体   English

“自定义事件”如何在VB.Net中运行?

[英]How does “Custom Event” work in VB.Net?

In C# if I want to create a "Custom Event" you do something like this: 在C#中,如果我想创建一个“自定义事件”,你可以这样做:

private EventHandler _MyEvent;
Public Event EventHandler MyEvent 
{
   add{ _MyEvent += value; }
   remove{ _MyEvent -= Value; }
}
protected void RaiseMyEvent()
{
   if(_MyEvent != nul)
      _MyEvent(this, EventArgs.Empty);
}

In VB this is not so straightforward nor can I find any help ANYWHERE on the net. 在VB中,这不是那么简单,我也无法在网上找到任何帮助。 This does not work: 这不起作用:

private _MyEvent as EventHandler
Public Custom Event MyEvent as EventHandler
   AddHandler(ByVal value as EventHandler)
      _MyEvent += value 'does not work
      addhandler _MyEvent, value 'does not work
      [Delegate].Combine(_MyEvent, value) '_MyEvent still nothing
   End AddHandler
   RemoveHandler(ByVal value as EventHandler)
      'Same kind of stuff here
   End RemoveHandler
   RaiseEvent(sender as Object, e as EventArgs)
      if(_MyEvent IsNot Nothing) Then '_MyEvent is always nothing
         _MyEvent.Invoke(sender, e)
      End If
   End RaiseEvent
End Event

Please help. 请帮忙。

VB takes a lot of the work out of the mix for you. VB为您提供了大量的工作。

Simply Declare an event: 简单地宣布一个事件:

Public Event DidSomething(sender as object, e as EventArgs)

Then anywhere in the code, call the falling Raise Event 然后在代码中的任何地方,调用下降的Raise事件

RaiseEvent DidSomething(me, EventArgs.Empty)

Delegates are immutable, so method "[Delegate].Combine" returns new delegate, but not modify the parameters. 委托是不可变的,因此方法“[Delegate] .Combine”返回新委托,但不修改参数。 So you need: 所以你需要:

_MyEvent = [Delegate].Combine(_MyEvent, value)

...and now if you (or anyone else is asking) how to create the method that Handles the raised event, based on the 'DidSomething' example you would do so as below: ...现在,如果您(或其他任何人在询问)如何创建处理引发事件的方法,请根据“DidSomething”示例执行以下操作:

Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething
   'Code for Event here
End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM