zoukankan      html  css  js  c++  java
  • winform Chart控件 获取鼠标处坐标值方法

    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 + " 
    日期:{0}", DateTime.FromOADate(dp.XValue), dp.YValues[0]);  
                }  
                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[0];     
                  //自我实现值的显示            
               }  
               else  
               {  
                   this.Cursor = Cursors.Default;  
               }  
            }  

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

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

    4.自动光标的实现

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

      • 新添加一条直线序列来代替,在鼠标移动时需要删除之前的“序列光标”再添加新的“序列光标”,不够流畅,效果不理想;
      • 尝试用 GDI绘制一条直线作为光标,需要不能的刷新,效果也不太理想;
      • 最后GDI+异或绘制线条的方式,可以很好的解决这个问题,但仍有一个问题就是,在序列主动刷新(比如显示实时数据波形,2秒钟刷新一次)的时候,容易留下上次的光标痕迹,大家可以试试效果。
  • 相关阅读:
    垃圾收集器
    垃圾回收机制算法分析
    【kinetic】操作系统探索总结(六)使用smartcar进行仿真
    【kinetic】操作系统探索总结(五)创建简单的机器人模型smartcar
    VS2015配置环境支持opencv3库(网络方法总结)
    【超级经典】程序员装B指南(转)
    shell编程-bash教程入门
    GraduateDesign-给APP添加获取位置信息和天气预报的功能(json)
    GraduateDesign-初试APP编写(去除虚拟按键和禁止状态栏下拉)
    device_create为何可以在/sys/class/具体类/属性文件?怎么实现的
  • 原文地址:https://www.cnblogs.com/powerzhang/p/3289264.html
Copyright © 2011-2022 走看看