当前位置: 移动技术网 > IT编程>开发语言>c# > ZedGraph怎样在双击图形后添加箭头标记

ZedGraph怎样在双击图形后添加箭头标记

2019年12月28日  | 移动技术网IT编程  | 我要评论

场景

在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轴刻度的最大值。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网