一个简单的场景:一个引发事件的自定义类。我希望在表单中使用此事件并对其做出反应。我怎么做?代码示例,请!
请注意,表单和自定义类是单独的类。
答案 0 :(得分:27)
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.....
}
}
答案 1 :(得分:6)
在表单中:
void SubscribeToEvent(OtherClass theInstance)
{
theInstance.SomeEvent += this.MyEventHandler;
}
void MyEventHandler(object sender, EventArgs args)
{
// Do something on the event
}
您只需按照与表单中的事件相同的方式订阅其他类的活动。要记住的三件重要事情:
1)您需要确保您的方法(事件处理程序)具有适当的声明以匹配另一个类上事件的委托类型。
2)您需要看到其他课程的事件(即:公共或内部)。
3)订阅类的有效实例,而不是类本身。
答案 2 :(得分:0)
假设您的事件由EventHandler处理,则此代码有效:
protected void Page_Load(object sender, EventArgs e)
{
MyClass myObj = new MyClass();
myObj.MyEvent += new EventHandler(this.HandleCustomEvent);
}
private void HandleCustomEvent(object sender, EventArgs e)
{
//handle the event
}
如果您的“自定义事件”需要处理其他签名,则需要使用该签名。