Диаграмма: PixelPositionToValue не точна при поиске координат x, y - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь отобразить координаты X и Y данных диаграммы на небольшом дисплее.Все работает хорошо, но показанные данные не точны.

Вот код ниже:

 var results = chart1.HitTest(e.X, e.Y, false, ChartElementType.PlottingArea);

            foreach (var result in results)
            {
                if (result.ChartElementType == ChartElementType.PlottingArea)
                {
                    yValue = chart1.ChartAreas[0].AxisY2.PixelPositionToValue(e.Y);
                    xValue = chart1.ChartAreas[0].AxisX2.PixelPositionToValue(e.X);
                }
            }
            if (OverlapcheckBox1.Checked)
            {
                int val = Convert.ToInt16(yValue / 24);
                yValue = yValue - 24 * val;

            }
            if (Cursor1checkBox.Checked && ClickMouse)
            {
                V1textBox1.Text = string.Concat(string.Concat(yValue).ToString());
            }
            if (Cursor2checkBox.Checked && ClickMouse)
            {
                V2textBox2.Text = string.Concat(string.Concat(yValue).ToString());
            }

Изображение показывает курсор в 10, но значение в V1 составляет 9,88 И изображение:

image

1 Ответ

0 голосов
/ 29 июня 2019

Если ваша мышь не обладает удивительной точностью, вы никогда не увидите точные 10.000. Вы могли бы округлить это:

private void Chart1_MouseClick(object sender, MouseEventArgs e) {
    double yValue = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
    yValue = Math.Round(yValue, 0);
}

Или, возможно, вы хотите найти DataPoints рядом с позицией щелчка курсора?

private void Chart1_MouseClick(object sender, MouseEventArgs e) {

    HitTestResult result = chart1.HitTest(e.X, e.Y);

    if (result.ChartElementType == ChartElementType.DataPoint) {
        DataPoint point = (DataPoint)result.Object;
        double yValue = point.YValues[0];
    }
}
...