winform Chart控件 获取鼠标处坐标值方法
2013-08-18 22:05
567 查看
Chart控件本身功能强大,应用广泛,因此其属性、方法也很多。
此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法
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[0]);
}
else
{
this.Cursor = Cursors.Default;
}
}
特点,可以查找序列上任意位置的值,但实现相对复杂。
标,自动获取光标与序列焦点处的坐标值。因此还涉及到光标的实现,本人之前也尝试过一些方法,
新添加一条直线序列来代替,在鼠标移动时需要删除之前的“序列光标”再添加新的“序列光标”,不够流畅,效果不理想;
尝试用 GDI绘制一条直线作为光标,需要不能的刷新,效果也不太理想;
最后GDI+异或绘制线条的方式,可以很好的解决这个问题,但仍有一个问题就是,在序列主动刷新(比如显示实时数据波形,2秒钟刷新一次)的时候,容易留下上次的光标痕迹,大家可以试试效果。
此处介绍在很多应用中需要查看鼠标位置处坐标值的一些方法
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[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秒钟刷新一次)的时候,容易留下上次的光标痕迹,大家可以试试效果。
相关文章推荐
- C#简单获取全屏中鼠标焦点位置坐标的方法示例
- 基于JavaScript实现 获取鼠标点击位置坐标的方法
- JS获取鼠标坐标的实例方法
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
- javascript获取当前鼠标坐标的方法
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
- js使用onmousemove和onmouseout获取鼠标坐标的方法
- c#windowsfrom开发中获取鼠标坐标的方法
- CListBox 中获取点击鼠标坐标的方法
- 获取鼠标当前位置坐标的方法 - 回复 "ps8.0" 同学
- 用JavaScript 获取鼠标移动时的坐标(兼容:IE8、谷歌、Firefox)和用jquery方法的简单分析
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y
- 解决C#获取鼠标相对当前窗口坐标的实现方法
- 基于JavaScript实现 获取鼠标点击位置坐标的方法
- papervision3d 中的坐标(2)--获取鼠标的空间坐标的两个方法
- 基于JavaScript实现 获取鼠标点击位置坐标的方法
- MFC 获取picture控件的鼠标点击坐标位置的方法
- 鼠标在winForm chart控件上移动时显示鼠标指针处的坐标值
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y【转】
- javascript获取当前鼠标坐标的方法