C# chart,有关如何在鼠标移动到Series上时显示节点及数据 (有待继续更新)

简介:

一、效果与思路

效果:

解决方案1

用chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,让用户知道我是选的那一个X的值,同时用tooltip显示该X轴上所有的Y值,结贴了谢谢大家。

至于如何显示鼠标移动到的那个series上的数据节点,可以在Mousmove时,用一个击中测试,判断。

参考代码,击中测试获得点数据点的索引:

1
2
3
4
5
6
if  (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
     int  i = e.HitTestResult.PointIndex;
     DataPoint dp = e.HitTestResult.Series.Points[i];
     e.Text =  string .Format( "{1:F3}" , dp.XValue, dp.YValues[0]);
}

 

解决方案2

用的是vs的chart控件。我在页面上的chart中写的是这种方式显示tooltip的(chart1是我的chart的名字)
chart1.GetToolTipText += new EventHandler<ToolTipEventArgs>(chart_GetToolTipText);
void chart_GetToolTipText(object sender, ToolTipEventArgs e)
        {
            if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
            {
                int i = e.HitTestResult.PointIndex;
                DataPoint dp = e.HitTestResult.Series.Points[i];
                e.Text = string.Format("{1:F3}", dp.XValue, dp.YValues[0]);
            }
        }
但是这个鼠标悬停的判断范围也好窄好窄好窄好窄,选一个点要选半天,鼠标晃来晃去都不能出现tooltip,这个根本没办法用。请问高手有没有好的方式可以让图形可以容忍一定的偏斜,就是说即使没有选到这个点,到这个点附近多少范围之类也可以出现tooltip
思路:
1、记得以前有一个软件,当你的鼠标移动到你需要指点的附近时,它就会“磁吸”到点那里去,你也可以这样,挑最近的吸过去。
2、如果你开发的是分析软件,而且精度要求很高的话,建议采用加粗放大方式,点击后“标点”再缩小回去。

参考

#VALX         //x轴数据
#VALY         //y轴数据
#PERCENT      //百分比
#AVG          //平均值
#INDEX        //索引值
#MAX          //最大值
#MIN          //最小值
#TOTAL        //合计
#LEGENDTEXT   //显示Legend的text
#SER          //显示Series名称

 

二、参考示例

ChartControl.RuntimeHitTesting属性一定要设为True。

Line Series markers的Visible一定要弄成True。CalcHitInfo的SeriesPoint一直为null,最后跑到devexpress support center上问的。我的dev版本是13.1.5,设置属性的方法是Series->View->MarkerVisibility。有的 版本可能是Series -> LineMarkerOptions -> Visible。

我的是以曲线图Spline为例,下面就是代码。

1.鼠标点击点弹出Messagebox

 

1
2
3
4
5
6
7
8
private  void  chartControl4_MouseClick( object  sender, MouseEventArgs e) 
     ChartHitInfo hitInfo = chartControl4.CalcHitInfo(e.Location); 
     if  (hitInfo.SeriesPoint !=  null
    
         MessageBox.Show(hitInfo.SeriesPoint.Values[0].ToString()); 
    

 

 

 

2.鼠标移动用ToolTipController显示值

外面定义

ToolTipController toolTipController = new ToolTipController();   

下面是dev的源码:

  View Code

MouseLeave事件代码

1
2
3
4
private  void  chartControl4_MouseLeave( object  sender, EventArgs e) 
     toolTipController.HideHint(); 

 



3.另一种鼠标移动显示信息的方法,用CustomDrawCrosshair事件,从别人那里学习的。这种还可以显示图片。

1
2
3
4
5
6
7
8
9
10
11
12
private  void  chartControl4_CustomDrawCrosshair( object  sender, CustomDrawCrosshairEventArgs e) 
   
     foreach  (CrosshairElement element  in  e.CrosshairElements) 
    
         SeriesPoint point = element.SeriesPoint; 
         element.LabelElement.MarkerImage = Image.FromFile( @"F:\Resources\Add.png" ); // 设置图片路径 
         element.LabelElement.MarkerImageSizeMode = ChartImageSizeMode.Stretch; 
         element.LabelElement.MarkerSize =  new  Size(100, 100);  // 大小 
         element.LabelElement.Text = point.Values[0].ToString(); //显示要显示的文字 
    

 

这里有devexpress用CustomDrawCrosshair事件显示点信息的DemoHow to: Show a Tooltip with a Series Point's Data

 

 

 

 

 

 

 

 

参考

1.hustaiyaya, winform chart控件鼠标悬停显示Y值

2.黄大仙儿c#—devexpress chartcontrol 鼠标点击chart上的点事件,鼠标移动显示值,2014-3。

3. c# chart 鼠标放在数据点上出现的小提示。

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。




    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5862471.html,如需转载请自行联系原作者




相关文章
|
3月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
53 1
|
1月前
|
SQL 缓存 分布式计算
C#如何处理上亿级数据的查询效率
C#如何处理上亿级数据的查询效率
15 1
|
1月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
34 0
|
2月前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
41 8
|
1月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
328 0
|
3月前
|
存储 C# 数据库
解决C#对Firebase数据序列化失败的难题
在游戏开发中,Unity结合Firebase实时数据库为开发者提供强大支持,但在C#中进行数据序列化和反序列化时常遇难题。文章剖析了数据丢失或反序列化失败的原因,并给出解决方案,包括使用`JsonUtility`、确保字段标记为`[Serializable]`以及正确配置网络请求。示例代码演示了如何在Unity环境中实现Firebase数据的序列化和反序列化,并通过设置代理IP、Cookies和User-Agent来增强网络请求的安全性。这些技巧有助于确保数据完整传输,提升开发效率。
解决C#对Firebase数据序列化失败的难题
|
3月前
|
Linux C#
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application
|
3月前
|
开发框架 .NET C#
WPF/C#:显示分组数据的两种方式
WPF/C#:显示分组数据的两种方式
56 0
|
3月前
|
XML C# 数据格式
WPF/C#:如何将数据分组显示
WPF/C#:如何将数据分组显示
37 0
|
3月前
|
C# Windows
WPF/C#:如何显示具有层级关系的数据
WPF/C#:如何显示具有层级关系的数据
51 0