【发布时间】:2018-11-13 04:35:21
【问题描述】:
我正在 C#.Net WinForms 中编写代码,以便在单击图表上的某些数据点时添加标签。 在点击图表之前,图表如下所示。
现在我单击 330-340 之间的数据点。该图表显示了带有双标签 (338.61) 的选定数据点。如下所示:
下面是 chart_mouseclick 的代码
private void chart1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
double mouse_Xvalue = chart1.ChartAreas[0].AxisX.PixelPositionToValue(e.X);
double mouse_Yvalue = chart1.ChartAreas[0].AxisY.PixelPositionToValue(e.Y);
DataPoint Prev_DataPoint = chart1.Series[0].Points.Select(x => x)
.Where(x => x.XValue >= mouse_Xvalue)
.DefaultIfEmpty(chart1.Series[0].Points.First()).First();
DataPoint Next_DataPoint = chart1.Series[0].Points.Select(x => x)
.Where(x => x.XValue <= mouse_Xvalue)
.DefaultIfEmpty(chart1.Series[0].Points.Last()).Last();
DataPoint Add_DataPoint = Math.Abs(Prev_DataPoint.XValue - mouse_Xvalue) < Math.Abs(Next_DataPoint.XValue - mouse_Xvalue) ? Prev_DataPoint : Next_DataPoint;
int add_data_point_index = chart1.Series[0].Points.IndexOf(Add_DataPoint);
DataPoint max = Add_DataPoint;
for (int i = add_data_point_index - 10; i <= add_data_point_index + 10; i++)
{
DataPoint dp = chart1.Series[0].Points[i];
if (dp.YValues[0] > max.YValues[0])
{
add_data_point_index = i;
max = dp;
}
}
chart1.Series[1].Points.Add(max);
chart1.Series[1].Sort(PointSortOrder.Ascending, "X");
for (int i = 0; i < chart1.Series[1].Points.Count; i++)
{
chart1.Series[1].Points[i].Label =
Math.Round(chart1.Series[1].Points[i].XValue, 2).ToString();
}
}
}
代码有什么问题?
【问题讨论】:
-
你试过调试你的代码吗?
-
是的。 @AccessDenied
-
你的数组中有重复的点吗?
-
@AccessDenied 没有重复点。我在添加数据点之前和之后检查了
Series.Point.Count。Series.Point.Count只增加一,点击后。 -
通常不需要刷新图表。 - 你的问题是什么 ?你不添加一个新的数据点吗?为什么它带有标签令人惊讶?另外:除了对点进行排序之外,您还可以在正确的位置插入。
标签: c# .net charts label mschart