найти значение точек на графике

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

Я хочу, чтобы пользователь видел value, x_value и y_value каждой части во всплывающей подсказке, щелкая по этой части.

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

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


person Asma Good    schedule 10.03.2012    source источник


Ответы (1)


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

    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);
            }
        }
    }

Результат:

введите здесь описание изображения

ИЗМЕНИТЬ:

чтобы отображать всплывающую подсказку при каждом движении мыши, вы можете использовать следующий код:

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

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

person digEmAll    schedule 10.03.2012
comment
Большое спасибо. При запуске проекта у меня ничего не происходит. Методы mouse_Move и mouse_Click не работают. Должен ли я добавить что-нибудь на диаграмму? для примераchart1.Mouseclick..... . Обратите внимание, что я построил диаграмму динамически. - person Asma Good; 10.03.2012
comment
Моя последняя проблема решена. Это сработало хорошо. Другой вопрос: Что, если я хочу использовать mouse_hover. Можете ли вы изменить код, чтобы пользователь мог видеть значения, наведя указатель мыши? - person Asma Good; 10.03.2012
comment
Привет, digEmAll снова. Как я могу изменить код, чтобы пользователь видел значения только тогда, когда идентификатор указателя находится в точке? - person Asma Good; 18.05.2012
comment
@AsmaGood: ну, код в основном тот же, вам просто нужно быть более строгим и не показывать всплывающую подсказку, если мышь не находится в точке. Если вы абсолютно не можете, откройте новый вопрос, потому что мы уходим далеко от исходного вопроса здесь... - person digEmAll; 18.05.2012
comment
Я получаю сообщение об ошибке определения var pos = e.Location; - person user2924019; 02.10.2016
comment
Этот код должен работать... Если у вас есть конкретные проблемы, откройте другой вопрос - person digEmAll; 03.10.2016
comment
Спасибо за код, все другие различные принятые ответы от SO не работали, но этот работает нормально! - person sailfish009; 31.07.2018