[英]Event pass parameter
I have problem with event. 我遇到了问题。 For example let i have event public event EventHandler<AxisChangedEventArgs> AxisChanged
which fires when Axis pan or zoom or something else. 例如,让我有一个public event EventHandler<AxisChangedEventArgs> AxisChanged
,当Axis平移或缩放或其他操作时将触发该public event EventHandler<AxisChangedEventArgs> AxisChanged
。 When it's firing i am making Console.WriteLine("Working");
触发时,我正在制作Console.WriteLine("Working");
. 。 How can i pass CFDBOX
parameter into SomeWork
anonymous method does not help because it will be imposible to unsubscribe from it. 我如何将CFDBOX
参数传递到SomeWork
匿名方法中没有帮助,因为无法取消订阅它。 And i cannot override AxisChanged
event. 而且我无法覆盖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");
}
;
Take advantage of closure lambda expressions: 利用闭包 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;
}
Any parameter which must be passed with an event
should be a member of your EventArgs
implementation. 必须与event
一起传递的任何参数都应该是EventArgs
实现的成员。 In your scenario: AxisChangedEventArgs
. 在您的方案中: AxisChangedEventArgs
。 Hope i get your question. 希望我能回答你的问题。
The sender of the event (in your case o
) should always be the instance, which calls the event. 事件的发送者(在您的情况下为o
)应该始终是调用该事件的实例。 So if your event get's fired from different classes (not instances!), you will have to check for the type of o
. 因此,如果从不同的类(不是实例!)触发了事件,则必须检查o
的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.