在开发日志(七)中实现了换卷绘图的前置功能,
接下来实现具体绘图。
首先实现接口
1 2 3 4 5 6 7 8 9 10
| public EvtHanlder hanlder { get { EvtHanlder h = new EvtHanlder(); h.ReelChangeEvent += ReelChangeHandler; return h; } }
|
定义换卷处理事件
1 2 3 4 5 6 7
| public void ReelChangeHandler(object sender, CustomEventArgs Args) { Console.WriteLine("Chart: Event ReelChange"); double line = (double)Args.msg; AddLineH(line); }
|
其中绘制横线函数
1 2 3 4 5 6 7 8 9 10 11 12 13
| private StripLine AddLineH(double AxisY) { StripLine line = new StripLine(); line.StripWidth = 0.01; line.BackColor = Color.Green; line.IntervalOffset = AxisY; chart.ChartAreas[0].AxisY.StripLines.Add(line); LineCollectionH.Add(line); chart.Invalidate(); return line; }
|
在主程序的换卷操作中添加事件触发
1 2 3 4 5 6 7
| foreach (PluginInterface.IPlugin p in plugins) { double line = reelLength * 0.01 * cfg.coefficient; p.hanlder.Trigger(this, new CustomEventArgs(line, CustomEvent.ReelChangeEvent)); }
|
触发流程为:
主程序触发换卷事件 -> 检测插件中是否有相关处理函数 -> 对应的处理函数被调用
这种方式可以实现动态挂载处理事件,主程序中不需要处理,只需要设置对应的事件触发器,插件中如果有对应的事件处理函数就会自动被调用执行。
最终的效果图:

图中的绿色线条都是在点击换卷事件后绘制的,而按钮相关事件中并没有直接进行绘图操作的代码。