繁体   English   中英

事件传递参数

[英]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.

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