在图表中找到点的值

8

我在表单上制作了一张图表。

我希望用户能够通过点击每个部分来看到其 valuex_valuey_value 值。

当用户移动鼠标时,气球应该消失。

我该如何实现这个功能?

1个回答

12
你可以这样做:
    ToolTip tooltip = new ToolTip();
    Point? clickPosition = null;

    void chart1_MouseMove(object sender, MouseEventArgs e)
    {
        if (clickPosition.HasValue && e.Location != clickPosition)
        {
            tooltip.RemoveAll();
            clickPosition = null;
        }
    }

    void chart1_MouseClick(object sender, MouseEventArgs e)
    {
        var pos = e.Location;
        clickPosition = pos;
        var results = chart1.HitTest(pos.X, pos.Y, false,
                                     ChartElementType.PlottingArea);
        foreach (var result in results)
        {
            if (result.ChartElementType == ChartElementType.PlottingArea)
            {
                var xVal = result.ChartArea.AxisX.PixelPositionToValue(pos.X);
                var yVal = result.ChartArea.AxisY.PixelPositionToValue(pos.Y);

                tooltip.Show("X=" + xVal + ", Y=" + yVal, 
                             this.chart1, e.Location.X,e.Location.Y - 15);
            }
        }
    }

结果:

enter image description here

编辑:

要使工具提示在鼠标移动时显示,您可以使用以下代码:

Point? prevPosition = null;
ToolTip tooltip = new ToolTip();

void chart1_MouseMove(object sender, MouseEventArgs e)
{
    var pos = e.Location;
    if (prevPosition.HasValue && pos == prevPosition.Value)
        return;
    tooltip.RemoveAll();
    prevPosition = pos;
    var results = chart1.HitTest(pos.X, pos.Y, false, 
                                 ChartElementType.PlottingArea);
    foreach (var result in results)
    {
        if (result.ChartElementType == ChartElementType.PlottingArea)
        {
            var xVal = result.ChartArea.AxisX.PixelPositionToValue(pos.X);
            var yVal = result.ChartArea.AxisY.PixelPositionToValue(pos.Y);

            tooltip.Show("X=" + xVal + ", Y=" + yVal, this.chart1, 
                         pos.X, pos.Y - 15);
        }
    }
}

请注意,这会在图表的任何位置显示工具提示。如果您想仅在鼠标靠近系列点时显示它,则可以使用 mschart 功能,例如:

yourSeries.ToolTip = "X=#VALX, Y=#VALY";

(更多示例在此处


非常感谢。运行项目时,我什么也看不到。方法mouse_Move和mouse_Click没有运行。我应该在图表中添加任何内容吗?例如“chart1.Mouseclick.....”。请注意,我已经动态地创建了图表。 - Asma Good
嗨,digEmAll,你好。我该如何更改代码,以便用户只在指针位于该点时才能看到值? - Asma Good
@AsmaGood:代码基本上是一样的,你只需要更加严格并且不在鼠标不在点上时显示工具提示。如果你绝对不能这样做,那么请开一个新问题,因为我们已经偏离了原始问题... - digEmAll
这段代码应该可以正常工作... 如果您有具体的问题,请开一个新的问题。 - digEmAll
感谢您的代码,所有其他来自SO的各种答案都没有起作用,但这个可以正常工作! - sailfish009
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接