найти значение точек на графике - PullRequest
7 голосов
/ 10 марта 2012

Я сделал диаграмму в своей форме.

Я хочу, чтобы пользователь видел value, x_value и y_value каждой детали в воздушном шаре, нажав на эту часть.*

Баллон исчезает, когда пользователь перемещает мышь.

Как я могу это сделать?

1 Ответ

11 голосов
/ 10 марта 2012

Вы можете сделать что-то вроде этого:

    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";

(дополнительные примеры здесь )

...