如何使用工具提示中的值并对其进行简单的数学计算?

时间:2018-10-10 21:10:49

标签: c# winforms charts

我正在使用Windows窗体并具有折线图。我有一个带有以下代码的工具提示:

private void chart1_MouseMove(object sender, MouseEventArgs e)
{
    HitTestResult result = chart1.HitTest(e.X, e.Y);
    System.Drawing.Point p = new System.Drawing.Point(e.X, e.Y);`
    chart1.ChartAreas[0].CursorX.Interval = 0;
    chart1.ChartAreas[0].CursorX.SetCursorPixelPosition(p, true);
    chart1.ChartAreas[0].CursorY.SetCursorPixelPosition(p, true);

    chart1.Series[0].ToolTip = getLegendName(legendOne) + "\n" + info;

    if (chart1.Series.IndexOf(legendTwo) == 1)
    {
        chart1.Series[1].ToolTip = getLegendName(legendTwo) + "\n" + info;
    }
    if (chart1.Series.IndexOf(legendThree) == 2)
    {
        chart1.Series[2].ToolTip = getLegendName(legendThree) + "\n" + info;
    }
    if (chart1.Series.IndexOf(legendFour) >= 3)
    {
        chart1.Series[3].ToolTip = getLegendName(legendFour) + "\n" + info;
    }
}

我现在希望在每次弹出工具提示时都单击,以便获得Y值。我想两次进行,所以我可以利用第二点和第一点之间的差异来找出两个特定点之间的整体差异。

private void chart1_Click(object sender, EventArgs e)
{
    if (diffCounter == 0)
    {
        valXOne = "#VALX";
        Console.WriteLine("VALX " + valXOne);
        diffCounter++;
    }
    if (diffCounter == 1)
    {
        valXTwo = "#VALX";
        diffCounter++;
    }
    diffCounter = 0;

    double xOne = 0;
    double xTwo = 0;

    if (double.TryParse(valXOne, out double resultOne))
    {
        xOne = resultOne;
    }

    if (double.TryParse(valXTwo, out double resultTwo))
    {
        xTwo = resultTwo;
    }

    pointDifferenceTextBox.Text = (Math.Abs(xTwo - xOne)).ToString();
}

我当前的代码无法正常工作,但是我试图将其设置在可行的位置。我只是不知道如何从工具提示中读取值。工具提示可以理解字符串“ #VALX”,但普通字符串当然不能。如何为我的变量valXONE访问或读取此值?

1 个答案:

答案 0 :(得分:0)

您的案例中无需填写Tooltip文本。

只需使用HitTest即可确定要击中的点并直接读取其值!

这将是ToolTip表达式从任何地方获取“ #VALX”的地方。

这是您的点击事件的更正版本:

int diffCounter = 0;
double xOne = 0;
double xTwo = 0;

private void chart1_MouseClick(object sender, MouseEventArgs e)
{
    HitTestResult result = chart1.HitTest(e.X, e.Y);
    if (result.PointIndex >= 0)
    {
        if (diffCounter == 0)
        {
            xOne = result.Series.Points[result.PointIndex].XValue;
            diffCounter++;
            Console.WriteLine("VALX 2 " + xOne  );

        }
        else if (diffCounter == 1)
        {
            xTwo = result.Series.Points[result.PointIndex].XValue;
            diffCounter = 0;
            Console.WriteLine("VALX 1 " + xTwo  );
        }
        Console.WriteLine("Delta = " +( xTwo - xOne) );
    }
}

请注意,除了自动表达式值之外,您还可以为每个DataPoint.ToolTip设置固定值。这些可能很有趣,您可以直接从该酒店领取。