ZedGraph怎样在双击图形后添加箭头标记
场景
在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怎样在双击图形后添加箭头标记的更多相关文章
- easyui datagrid 每条数据后添加操作按钮
easyui datagrid 每条数据后添加“编辑.查看.删除”按钮 1.给datagrid添加操作字段:字段值 <table class="easyui-datagrid" ...
- JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里
JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里 <!doctype html> <html manifest="lab4.manifest&q ...
- JavaScript在div后添加删除div
var idd = 'str'; $('.task-done-detail-content-p7').click(function () { var id = this.id; if(idd !== ...
- nodejs操作 mongoose(mongodb)和Sequelize(mysql)查询数据后添加新属性未生效
最近在着手koa时候,发现mongoose(mongodb)查询数据库后添加新属性,前端拿不到新属性问题, 然后测试了一下Sequelize(mysql),发现也有同样的问题存在.此时着手干! 1.1 ...
- svn提交后 添加注释
svn 提交后添加注释 第一步: 第二步: 第三步:提交就可以了. 注意:如果svn服务器管理员没有激活pre-revprop-change这个hook,会出现 需要让svn服务器管理员没有激活pre ...
- rancher导入k8s集群后添加监控无数据
1.日志报错 rancher导入k8s集群后添加监控无数据,rancher日志报错: k8s.io/kube-state-metrics/pkg/collectors/builder.go:: Fai ...
- gulp给文件后添加md5时间戳
这里为总的方法,实际项目中拷贝出来的,底下有详细的总结以及只针对添加时间戳的方法 1 // 引入 gulp及组件 var gulp = require('gulp'), autoprefixer = ...
- docker容器启动后添加端口映射
DOCKER 给运行中的容器添加映射端口 方法1 1.获得容器IP 将container_name 换成实际环境中的容器名 docker inspect `container_name` | grep ...
- cm 安装cdh 后添加hive服务
cm 安装cdh 后添加hive服务,出现错误提示 添加服务时候hive 配置如下: 错误信息提示: 错误日志: xec /opt/cloudera/parcels/CDH-5.4.7-1.cdh5. ...
随机推荐
- ts的特殊数据类型
四. Ts数据类型 tuple(元组类型):可以给数组指定位置存指定类型数据 例:let arr:[number, string] = [123, ‘123’]; enum(枚举):将数字转化为标识符 ...
- 珠峰-cookie相关的东西
#### md5 #### #####
- 关于macos升级到catalina之后cisco无法使用的问题
最近升级macos到最新的catalina系统,发现cisco的anyconnect用不了了,google了下,发现不是个例,mac提示联系软件开发者更新软件以兼容catalina,这就呵呵了. 于是 ...
- 理解设备像素、设备独立像素、css像素、viewport
设备像素也叫物理像素. 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了. 设备分辨率描述的就是这个显示器的宽和高分别是多少个设备像素. 设备像素和设备分辨率 ...
- 内部类(innerclasses)
一般情况下,我们把类定义成独立的单元.有些情况下,我们把一个类放在另一个类的内部定义为内部类. 内部类的作用: 1.内部类提供了更好的封装.只能让外部类直接访问,不允许同一个包中的其他类直接访问. 2 ...
- 跨域打开页面:Uncaught DOMException: Blocked a frame with origin
Uncaught DOMException: Blocked a frame with origin 使用postMessage()方法可以解决跨域传值的问题 Api: https://develop ...
- HTML连载70-相片墙、盒子阴影和文字阴影
一. 制作一个相片墙 二. <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- springCloud进阶(微服务架构&Eureka)
springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...
- clr via c# 参数和属性
1,可选参数和命名参数 当给参数指定默认值时,可以在调用的时候省略 有默认值的参数,必须放在所有没有默认值的参数后面,但是 参数数组必须放在最后面,parm 默认值必须时编译时能确定的常量值,对于值类 ...
- List泛型
.Net自从2.0以后开始支持泛型. 泛型的作用:可以创建独立于被包含类型的类和方法.泛型类使用泛型类型,并可以根据需要使用特定的类型替换泛型类型.这就保证了类型安全性:如果某个类型不支持泛型类,编译 ...