[英]Event pass parameter
我遇到了问题。 例如,让我有一个public event EventHandler<AxisChangedEventArgs> AxisChanged
,当Axis平移或缩放或其他操作时将触发该public event EventHandler<AxisChangedEventArgs> AxisChanged
。 触发时,我正在制作Console.WriteLine("Working");
。 我如何将CFDBOX
参数传递到SomeWork
匿名方法中没有帮助,因为无法取消订阅它。 而且我无法覆盖AxisChanged
事件。
public void AddEvents(CFDBOX CFDBOX) {
CFDBOX.PlotModel.Axes[0].AxisChanged += SomeWork;
}
public void RemoveEvents(CFDBOX CFDBOX) {
CFDBOX.PlotModel.Axes[0].AxisChanged -= SomeWork;
}
public EventHandler<AxisChangedEventArgs> SomeWork =
delegate(object o, AxisChangedEventArgs args) {
Console.WriteLine("Working");
}
;
利用闭包 lambda表达式:
private EventHandler<AxisChangedEventArgs> axisChangedEventHandler;
public void AddEvent(CFDBOX CFDBOX) {
// keep a reference of the event handler to remove it later
axisChangedEventHandler = (o, args) => {
// parameter CFDBOX bound to the event handler
Console.WriteLine("Working " + CFDBOX);
};
// register event handler
CFDBOX.PlotModel.Axes[0].AxisChanged += axisChangedEventHandler;
}
public void RemoveEvent() {
// unregister event handler
CFDBOX.PlotModel.Axes[0].AxisChanged -= axisChangedEventHandler;
}
必须与event
一起传递的任何参数都应该是EventArgs
实现的成员。 在您的方案中: AxisChangedEventArgs
。 希望我能回答你的问题。
事件的发送者(在您的情况下为o
)应该始终是调用该事件的实例。 因此,如果从不同的类(不是实例!)触发了事件,则必须检查o
的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.