样条图,如何获取点击的item?
Spline chart, how to get the clicked item?
我正在使用 C# 处理图表。
我想知道如何让项目(样条曲线)在图表上单击以执行更改颜色或隐藏等操作。
您可以按照建议使用HitTest
检查点击的项目..:[=30=]
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
// now do what you want with the data..:
if (result.Series != null && result.PointIndex >= 0)
Text = "X = " + result.Series.Points[result.PointIndex].XValue +
" Y = " + result.Series.Points[result.PointIndex].YValues[0];
}
为了帮助用户,您可以指出可能的命中:
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
Cursor = result.Series != null ? Cursors.Hand : Cursors.Default;
}
让样条线稍大一点,让您的用户受益:
eachOfYourSeries.BorderWidth = 4;
当然,您显示的图表在不先放大的情况下无法进行受控点击..
现在,如果您只想隐藏 Series
或更改其 Color
,那么 HitTestResult
就足够了:
result.Series.Enabled = flase;
或
result.Series.Color = Color.Fuchsia;
但是要访问点击的值,可能不是..:[=30=]
请注意,特别是 Spline
或 Line
图形,只需要非常 很少 DataPoints
来创建它们的线条;所以 HitTest
的结果是不够的;它 将 告诉您点击了哪个系列以及 最接近的 DataPoint
但要获得正确的 值 您可能仍然需要 将像素转换为数据值 。
因此,您可能更愿意使用方便的函数 PixelPositionToValue
:
而不是 HitTest
结果
float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);
这将获取实际 DataPoints
之间的所有值。当然,您可以对 Y 值执行相同的操作:
float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);
注意只能在图表不忙于确定布局时使用这些功能;正式而言,这仅在三个 Paint
事件中的任何一个期间发生。但我发现在实践中鼠标事件也可以。当图表未准备好时,您将获得空值..
我正在使用 C# 处理图表。
我想知道如何让项目(样条曲线)在图表上单击以执行更改颜色或隐藏等操作。
您可以按照建议使用HitTest
检查点击的项目..:[=30=]
private void chart1_MouseDown(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
// now do what you want with the data..:
if (result.Series != null && result.PointIndex >= 0)
Text = "X = " + result.Series.Points[result.PointIndex].XValue +
" Y = " + result.Series.Points[result.PointIndex].YValues[0];
}
为了帮助用户,您可以指出可能的命中:
private void chart1_MouseMove(object sender, MouseEventArgs e)
{
HitTestResult result = chart1.HitTest(e.X, e.Y);
Cursor = result.Series != null ? Cursors.Hand : Cursors.Default;
}
让样条线稍大一点,让您的用户受益:
eachOfYourSeries.BorderWidth = 4;
当然,您显示的图表在不先放大的情况下无法进行受控点击..
现在,如果您只想隐藏 Series
或更改其 Color
,那么 HitTestResult
就足够了:
result.Series.Enabled = flase;
或
result.Series.Color = Color.Fuchsia;
但是要访问点击的值,可能不是..:[=30=]
请注意,特别是 Spline
或 Line
图形,只需要非常 很少 DataPoints
来创建它们的线条;所以 HitTest
的结果是不够的;它 将 告诉您点击了哪个系列以及 最接近的 DataPoint
但要获得正确的 值 您可能仍然需要 将像素转换为数据值 。
因此,您可能更愿意使用方便的函数 PixelPositionToValue
:
HitTest
结果
float px = (float)yourChartArea.AxisX.PixelPositionToValue(e.X);
这将获取实际 DataPoints
之间的所有值。当然,您可以对 Y 值执行相同的操作:
float py = (float)yourChartArea.AxisY.PixelPositionToValue(e.Y);
注意只能在图表不忙于确定布局时使用这些功能;正式而言,这仅在三个 Paint
事件中的任何一个期间发生。但我发现在实践中鼠标事件也可以。当图表未准备好时,您将获得空值..