在开发日志(七)中实现了换卷绘图的前置功能,

接下来实现具体绘图。

首先实现接口

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.Interval = 0;
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));
}

触发流程为:

主程序触发换卷事件 -> 检测插件中是否有相关处理函数 -> 对应的处理函数被调用

这种方式可以实现动态挂载处理事件,主程序中不需要处理,只需要设置对应的事件触发器,插件中如果有对应的事件处理函数就会自动被调用执行。

最终的效果图:

image-20221023172000467

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