用新动态创建的图表控件替换现有图表控件

时间:2016-05-01 07:12:33

标签: c# .net winforms charts

我有一个带有图表控件的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,则不会触发此事件处理程序。

在保持我的事件处理程序到位的同时,最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

方法1:如果Charts.CreateNewChart使用给定的参数创建新的Chart,您仍然需要将其添加到Controls集合中。

这应该做的工作:

chart.Parent = chartCC.Parent; 

这是一个简短的版本:

chartCC.Parent.Controls.Add(chart);

完全相同。

要将它带到前面,可能也需要这个:

chart.BringToTop();

您的方法2竭尽全力克隆图表的细节。如果需要,你将不得不这样做。但如果它们都有默认值,您可能不需要它。但您仍然需要将其添加到Controls集合中,如上所述!