我有一个带有图表控件的Windows窗体。在我的代码中,我动态生成一个新的图表控件。我需要用新的图表控件(图表)替换现有的图表控件(chartCC)。我尝试了两种方法:
方法1
Chart chart = Charts.CreateNewChart(chartCC.Location.X, chartCC.Location.Y, chartCC.Width, chartCC.Height, dataIdx, 16, 12, 5f, 5f, "BB");
chartCC = chart;
方法1不起作用。图表控件在视觉上没有任何反应。
方法2
Chart chart = Charts.CreateNewChart(chartCC.Location.X, chartCC.Location.Y, chartCC.Width, chartCC.Height, dataIdx, 16, 12, 5f, 5f, "BB");
chartCC.ChartAreas.Clear();
foreach (var ca in chart.ChartAreas)
{
chartCC.ChartAreas.Add(ca);
}
//Chart Series
chartCC.Series.Clear();
foreach(var cs in chart.Series)
{
chartCC.Series.Add(cs);
}
//Chart Titles
chartCC.Titles.Clear();
foreach (var title in chart.Titles)
{
chartCC.Titles.Add(title);
}
//Chart Annotations
chartCC.Annotations.Clear();
foreach (var annotation in chart.Annotations)
{
chartCC.Annotations.Add(annotation);
}
chartCC.ChartAreas[0].RecalculateAxesScale();
chartCC.ChartAreas[0].AxisX.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chartCC.ChartAreas[0].AxisY.MajorGrid.LineDashStyle = ChartDashStyle.Dash;
chartCC.ChartAreas[0].CursorX.IsUserEnabled = true;
chartCC.ChartAreas[0].CursorX.IsUserSelectionEnabled = true;
chartCC.ChartAreas[0].CursorX.SelectionColor = System.Drawing.Color.Transparent;
chartCC.Invalidate();
方法2有效,但它对我来说是个大问题。我的代码中有一个CursorPositionChanged事件处理程序。
private void chartCC_CursorPositionChanged(object sender, CursorEventArgs e)
{
}
但是,如果我使用方法2,则不会触发此事件处理程序。
在保持我的事件处理程序到位的同时,最好的方法是什么?
答案 0 :(得分:1)
方法1:如果Charts.CreateNewChart
使用给定的参数创建新的Chart
,您仍然需要将其添加到Controls
集合中。
这应该做的工作:
chart.Parent = chartCC.Parent;
这是一个简短的版本:
chartCC.Parent.Controls.Add(chart);
完全相同。
要将它带到前面,可能也需要这个:
chart.BringToTop();
您的方法2竭尽全力克隆图表的细节。如果需要,你将不得不这样做。但如果它们都有默认值,您可能不需要它。但您仍然需要将其添加到Controls
集合中,如上所述!