ZedGraph怎样在双击图形后添加箭头标记
程序员文章站
2023-08-29 13:39:22
场景 在ZedGraph的曲线图上,双击图时会在图形上生成箭头符号标记。 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 首先在ZedGraph所在的窗体的load事 ......
场景
在zedgraph的曲线图上,双击图时会在图形上生成箭头符号标记。
效果
注:
博客主页:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
首先在zedgraph所在的窗体的load事件中对zedgraph的鼠标双击事件进行重写
zgc.doubleclickevent -= zgc_doubleclickevent; //鼠标双击事件订阅 zgc.doubleclickevent += zgc_doubleclickevent; //鼠标双击事件订阅
然后在具体订阅的事件实现中
private static bool zgc_doubleclickevent(zedgraphcontrol sender, mouseeventargs e) { //获取(zedgraphcontrol 对象 zedgraphcontrol zgc = sender as zedgraphcontrol; if (zgc != null) { try { //获取鼠标焦点距离最近的点所在的曲线以及在曲线上的点的索引 pointf mousept = new pointf(e.x, e.y); curveitem nearstcurve; int i; zgc.graphpane.findnearestpoint(mousept, out nearstcurve, out i); if (nearstcurve != null && nearstcurve.points[i] != null) { //获取鼠标焦点距离最近的点的坐标 double x = nearstcurve.points[i].x; double y = nearstcurve.points[i].y; string title = nearstcurve.points[i].tag as string; #region 添加箭头标记 arrowobj myarrow = new arrowobj(color.fromargb(0xa0, 0x00, 0x00), 20, i + 1, zgc.graphpane.yaxislist[0].scale.min, i + 1, zgc.graphpane.yaxislist[0].scale.max); myarrow.line.style = system.drawing.drawing2d.dashstyle.dash; myarrow.line.dashoff = 1; myarrow.line.dashon = 1; myarrow.zorder = zorder.b_behindlegend; zgc.graphpane.graphobjlist.clear(); zgc.graphpane.graphobjlist.add(myarrow); #endregion } return true; } catch(exception ex) { icsharpcode.core.loggingservice<datacharthelper>.error("zgc_doubleclickevent exception:" + ex.message, ex); return false; } } else { return false; } }
注:
首先获取距离鼠标焦点最近的点以及所在的曲线。
然后根据距离最近的点的横纵坐标使用arrowobj 对象生成线。
arrowobj :表示图形上的图形箭头或线对象的类。arrowobj对象的列表由graphobjlist集合类维护。
arrowobj 的构造方法为:
第一个参数为颜色对象,第二个参数为大小,后面四个参数用于定位,两点确定一条直线,两个坐标确定一个点,所以是四个坐标确定一条线。
前两个确定一个点,后两个确定一个点。
在代码中使用的是:
arrowobj myarrow = new arrowobj(color.fromargb(0xa0, 0x00, 0x00), 20, i + 1, zgc.graphpane.yaxislist[0].scale.min, i + 1, zgc.graphpane.yaxislist[0].scale.max);
第一个点是在x轴上点,其坐标为上面距离鼠标焦点最近的点的横坐标+1,y轴刻度的最小值。
第二个点坐标横坐标一样,纵坐标是y轴刻度的最大值。