【发布时间】:2009-05-27 00:02:57
【问题描述】:
一个简单的场景:一个引发事件的自定义类。我希望在表单中使用此事件并对其做出反应。
我该怎么做?
请注意,表单和自定义类是不同的类。
【问题讨论】:
标签: c# events .net-2.0 event-handling
一个简单的场景:一个引发事件的自定义类。我希望在表单中使用此事件并对其做出反应。
我该怎么做?
请注意,表单和自定义类是不同的类。
【问题讨论】:
标签: c# events .net-2.0 event-handling
public class EventThrower
{
public delegate void EventHandler(object sender, EventArgs args) ;
public event EventHandler ThrowEvent = delegate{};
public void SomethingHappened() => ThrowEvent(this, new EventArgs());
}
public class EventSubscriber
{
private EventThrower _Thrower;
public EventSubscriber()
{
_Thrower = new EventThrower();
// using lambda expression..could use method like other answers on here
_Thrower.ThrowEvent += (sender, args) => { DoSomething(); };
}
private void DoSomething()
{
// Handle event.....
}
}
【讨论】:
在您的表单中:
private void SubscribeToEvent(OtherClass theInstance) => theInstance.SomeEvent += this.MyEventHandler;
private void MyEventHandler(object sender, EventArgs args)
{
// Do something on the event
}
您只需像订阅表单中的事件一样订阅其他类的事件。要记住的三个重要事项:
您需要确保您的方法(事件处理程序)具有适当的声明,以与其他类上的事件委托类型相匹配。
其他类的事件需要对您可见(即:公共或内部)。
订阅类的有效实例,而不是类本身。
【讨论】:
假设您的事件由 EventHandler 处理,则此代码有效:
protected void Page_Load(object sender, EventArgs e)
{
var myObj = new MyClass();
myObj.MyEvent += new EventHandler(this.HandleCustomEvent);
}
private void HandleCustomEvent(object sender, EventArgs e)
{
// handle the event
}
如果您的“自定义事件”需要其他签名来处理,则需要使用该签名。
【讨论】: