【发布时间】:2016-08-23 12:03:14
【问题描述】:
我创建了 System.Windows.Forms.DataVisualization.Charting.Chart 的子类。在构造函数中,我设置了默认图表区域和系列:
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
chartArea1.AxisX.Title = "Time (s)";
chartArea1.AxisY.Title = "Value(%)";
chartArea1.Name = "MainChartArea";
series1.ChartArea = "MainChartArea";
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
series1.Name = "Series1";
Series.Add(series1);
我在子类中添加了一组函数以使用 ChartAreas[0]。这一切都很好。
现在在 VS2010 中我创建了一个新控件,转到工具箱并添加我的自定义图表控件。似乎发生的是 VS 将我的默认图表区域和系列复制到父控件的 InitializeComponent 函数。
当我执行代码时,父控件的 InitializeComponent 函数内部出现异常,表示图表的子类已经有一个名为“MainChartArea”的图表区域,并且已经有一个名为“Series1”的系列。
如果我现在编辑父控件 InitializeComponent 代码以更改其构建和运行的名称就可以了。
但是,如果我现在返回并对父控件进行任何更改,VS 会再次重新复制默认图表区域和系列设置,导致同样的问题。
我知道我可以简单地从父控件的 InitializeComponent 函数中删除代码,但是我在图表控件的设计器中没有得到可视化的表示,并且手动编辑它似乎是一种不好的做法。
对 Chart 控件进行子类化以便在子类上设置区域和系列的正确方法是什么?
【问题讨论】:
-
具有花哨设计的控件,如 Chart,当您从它们派生时往往会出现行为不端。他们的设计师无法区分您在构造函数中添加的系列与您使用设计师添加的任何系列之间的区别。因此,它也会尽职地序列化您在构造函数中创建的那个。当您在设计器中创建一个系列时,您不太可能希望这样做。更糟糕的是,您的构造函数 also 在运行时运行,现在您有 两个 您不想要的系列。解决这个问题需要与设计师一起修补。完全不切实际,它没有记录并且非常复杂。别再帮忙了。
-
谢谢。我也很害怕。