场景

在ZedGraph的曲线图上,双击图时会在图形上生成箭头符号标记。

效果

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先在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), , i + , zgc.GraphPane.YAxisList[].Scale.Min, i + , zgc.GraphPane.YAxisList[].Scale.Max);
myArrow.Line.Style = System.Drawing.Drawing2D.DashStyle.Dash;
myArrow.Line.DashOff = ;
myArrow.Line.DashOn = ;
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), , i + , zgc.GraphPane.YAxisList[].Scale.Min, i + ,

zgc.GraphPane.YAxisList[].Scale.Max);

第一个点是在X轴上点,其坐标为上面距离鼠标焦点最近的点的横坐标+1,Y轴刻度的最小值。

第二个点坐标横坐标一样,纵坐标是Y轴刻度的最大值。

ZedGraph怎样在双击图形后添加箭头标记的更多相关文章

  1. easyui datagrid 每条数据后添加操作按钮

    easyui datagrid 每条数据后添加“编辑.查看.删除”按钮 1.给datagrid添加操作字段:字段值 <table class="easyui-datagrid" ...

  2. JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里

    JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里 <!doctype html> <html manifest="lab4.manifest&q ...

  3. JavaScript在div后添加删除div

    var idd = 'str'; $('.task-done-detail-content-p7').click(function () { var id = this.id; if(idd !== ...

  4. nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效

    最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...

  5. svn提交后 添加注释

    svn 提交后添加注释 第一步: 第二步: 第三步:提交就可以了. 注意:如果svn服务器管理员没有激活pre-revprop-change这个hook,会出现 需要让svn服务器管理员没有激活pre ...

  6. rancher导入k8s集群后添加监控无数据

    1.日志报错 rancher导入k8s集群后添加监控无数据,rancher日志报错: k8s.io/kube-state-metrics/pkg/collectors/builder.go:: Fai ...

  7. gulp给文件后添加md5时间戳

    这里为总的方法,实际项目中拷贝出来的,底下有详细的总结以及只针对添加时间戳的方法 1 // 引入 gulp及组件 var gulp = require('gulp'), autoprefixer = ...

  8. docker容器启动后添加端口映射

    DOCKER 给运行中的容器添加映射端口 方法1 1.获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep ...

  9. cm 安装cdh 后添加hive服务

    cm 安装cdh 后添加hive服务,出现错误提示 添加服务时候hive 配置如下: 错误信息提示: 错误日志: xec /opt/cloudera/parcels/CDH-5.4.7-1.cdh5. ...

随机推荐

  1. ts的特殊数据类型

    四. Ts数据类型 tuple(元组类型):可以给数组指定位置存指定类型数据 例:let arr:[number, string] = [123, ‘123’]; enum(枚举):将数字转化为标识符 ...

  2. 珠峰-cookie相关的东西

    ####  md5 #### #####

  3. 关于macos升级到catalina之后cisco无法使用的问题

    最近升级macos到最新的catalina系统,发现cisco的anyconnect用不了了,google了下,发现不是个例,mac提示联系软件开发者更新软件以兼容catalina,这就呵呵了. 于是 ...

  4. 理解设备像素、设备独立像素、css像素、viewport

    设备像素也叫物理像素. 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了. 设备分辨率描述的就是这个显示器的宽和高分别是多少个设备像素. 设备像素和设备分辨率 ...

  5. 内部类(innerclasses)

    一般情况下,我们把类定义成独立的单元.有些情况下,我们把一个类放在另一个类的内部定义为内部类. 内部类的作用: 1.内部类提供了更好的封装.只能让外部类直接访问,不允许同一个包中的其他类直接访问. 2 ...

  6. 跨域打开页面:Uncaught DOMException: Blocked a frame with origin

    Uncaught DOMException: Blocked a frame with origin 使用postMessage()方法可以解决跨域传值的问题 Api: https://develop ...

  7. HTML连载70-相片墙、盒子阴影和文字阴影

    一. 制作一个相片墙 二. <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  8. springCloud进阶(微服务架构&Eureka)

    springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...

  9. clr via c# 参数和属性

    1,可选参数和命名参数 当给参数指定默认值时,可以在调用的时候省略 有默认值的参数,必须放在所有没有默认值的参数后面,但是 参数数组必须放在最后面,parm 默认值必须时编译时能确定的常量值,对于值类 ...

  10. List泛型

    .Net自从2.0以后开始支持泛型. 泛型的作用:可以创建独立于被包含类型的类和方法.泛型类使用泛型类型,并可以根据需要使用特定的类型替换泛型类型.这就保证了类型安全性:如果某个类型不支持泛型类,编译 ...