Code Bye

winform chart控件鼠标悬停显示Y值


用的是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

如果你不嫌麻烦 倒是可以这样做:

获取鼠标所在位置在坐标区域内的坐标,判断该坐标离哪个点最近则tootip为那个点的Y值

10分
偷懒点,直接加粗,阴影曲线,不可以吗?
鼠标所在位置的坐标 可以根据 公式    (X轴最大值-X轴最小值)/(X最大值出的e.X-X最小值处的e.X)=(鼠标所在位置X坐标-X最小坐标)/(鼠标所在位置e.X-X最小值处的e.X)  
同理得出鼠标所在位置的Y坐标值
如何加粗,或者说点变成个圆圈也可以呀
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]);
            //}
            double i1 = 0;
            int i2 = 0;
            for (int i = 0; i < chart1.Series[0].Points.Count; i++)
{
                double flag = (chart1.Series[0].Points[i].XValue – e.X) * (chart1.Series[0].Points[i].XValue – e.X) + (chart1.Series[0].Points[i].YValues[0] – e.Y) * (chart1.Series[0].Points[i].YValues[0] – e.Y);
                if (i == 0)
                {
                    i1 = flag;
                }
                else
                {
                    if (flag < i1)
                    {
                        i1 = flag;
                        i2 = i;
                    }
                }
            }
            DataPoint dp = chart1.Series[0].Points[i2];
            e.Text = string.Format(“{1:F3}”, dp.XValue, dp.YValues[0]);
        }
这种方式我已经尝试了,弊端太多,不敢往下了
加粗不知道吗? 是对线的加错。。。像这样

                    seriesmax.ChartType = SeriesChartType.Line;
                    seriesmax.BorderWidth = 2;
                    seriesmax.ShadowColor = Color.Black;
                    seriesmax.ShadowOffset = 2;

5分
提供个思路给你:
1、记得以前有一个软件,当你的鼠标移动到你需要指点的附近时,它就会“磁吸”到点那里去,你也可以这样,挑最近的吸过去。
2、如果你开发的是分析软件,而且精度要求很高的话,建议采用加粗放大方式,点击后“标点”再缩小回去。

仅供参考。


问题解决了,我用了chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,让用户知道我是选的那一个X的值,同时用tooltip显示该X轴上所有的Y值,结贴了谢谢大家。
仁兄怎么实现的,可否贴出来看看,我也想实现这样的效果,在折线和柱图上都有用,可否赐教leo_navy@163.com
楼主,见你这个功能很炫,能给我发一份源码吗?我最近也在思考一个相似功能,麻烦您了
我邮箱547674781@qq.com,麻烦您了
具体的代码和调用,能发给我一份吗?
万分感谢!
793326822@qq.com

可以给每个点加一个marker,悬停就方便了

求楼主分享啊
谁有这段逻辑也给我一份吧。fspuzhang@163.com

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明winform chart控件鼠标悬停显示Y值