Chart控件本身功能强大,应用广泛,因此其属性、方法也很多。
此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法

1,调用Chart事件  GetToolTip

利用ToolTipEventArgs ,将ToolTipEventArgs的Text属性赋值即可实现,优点是非常简单,无需其他步骤,但其因为用到HitTest方法,只能获取序列点上的坐标值,不能获得“空白”位置的值 

        private void chart_Wave1_GetToolTipText(object sender, ToolTipEventArgs e)
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
this.Cursor = Cursors.Cross;
int i = e.HitTestResult.PointIndex;
DataPoint dp = e.HitTestResult.Series.Points[i];
e.Text = string.Format("数值:{1:F3}" + e.HitTestResult.Series.ChartArea + " \n日期:{0}", DateTime.FromOADate(dp.XValue), dp.YValues[]);
}
else
{
this.Cursor = Cursors.Default;
}
}

  

2.利用Chart的MouseMove事件和Chart方法 HitTest

特点是可以获取鼠标值,同样因为用到HitTest方法,只能获取序列上序列点处的坐标值,且需要自我实现值的显示

        private void chart_Wave1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult myTestResult= chart_Wave1.HitTest(e.X,e.Y);
if (myTestResult.ChartElementType == ChartElementType.DataPoint)
{
this.Cursor = Cursors.Cross;
int i = myTestResult.PointIndex;
DataPoint dp = myTestResult.Series.Points[i]; double doubleXValue= (dp.XValue);
double doubleYValue = dp.YValues[];
//自我实现值的显示
}
else
{
this.Cursor = Cursors.Default;
}
}

3.利用Chart的MouseMove事件和获取鼠标处坐标实现

根据鼠标位置自动转化为Chart控件ChartArea上的坐标值,再根据序列上(可以看成数组),可以找到每个序列点的坐标值,从而可以确定鼠标所在点在哪两个序列点之间,再利用线性插值或其他插值算法,计算出该点的值。
特点,可以查找序列上任意位置的值,但实现相对复杂。

4.自动光标的实现

引用第三中方法其实只用知道X的位置就可以遍历找出序列上该位置处的Y值,在很多情况下,需要添加自动光
标,自动获取光标与序列焦点处的坐标值。因此还涉及到光标的实现,本人之前也尝试过一些方法,

    • 新添加一条直线序列来代替,在鼠标移动时需要删除之前的“序列光标”再添加新的“序列光标”,不够流畅,效果不理想;
    • 尝试用 GDI绘制一条直线作为光标,需要不能的刷新,效果也不太理想;
    • 最后GDI+异或绘制线条的方式,可以很好的解决这个问题,但仍有一个问题就是,在序列主动刷新(比如显示实时数据波形,2秒钟刷新一次)的时候,容易留下上次的光标痕迹,大家可以试试效果。

最新文章

  1. spring3.0使用annotation完全代替XML(续)
  2. AS配置IDE
  3. Android SharedPreference的使用
  4. /proc/uptime详解
  5. java阿拉伯数字表示的金额转换成中文大写金额
  6. 并发容器之CopyOnWriteArrayList
  7. c#编程指南(四) 组元(Tuple)
  8. bootstrap table 服务器端分页例子分享
  9. cocos2dx lua调用C++类.
  10. js 滚轮事件 滚轮焦点图(轮播图)
  11. HUST 1376 Random intersection
  12. 监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)
  13. pandas(一)
  14. 给普通用户添加root权限
  15. kubectl 常用命令总结
  16. LeetCode 292 Nim Game 解题报告
  17. What is the largest TCP/IP network port number allowable for IPv4
  18. Beta阶段团队项目开发篇章2
  19. Linux安装配置SVN服务器
  20. python apply()函数

热门文章

  1. [javascript|基本概念]学习笔记
  2. 9款大气实用的HTML5/CSS3注册登录表单
  3. 【风马一族_xml】xml语法
  4. IntelliJ IDEA+Tomcat+Nginx运行git项目
  5. 解决nginx负载均衡的session共享问题
  6. Silverlight中弹出网页
  7. Mysql 的MYISAM引擎拷贝出现异常——Incorrect information in file 'xxx.frm'
  8. mac OS X下git代码行统计命令
  9. jQuery实现公告文字左右滚动
  10. webstorm 10.0.4 注册码