MSChart Customlabel引用不持久

时间:2018-05-26 21:31:12

标签: c# mschart

请承担我的解释,因为代码在我无法复制的计算机上。

我在C#中使用MSChart和CustomLabels。我有一个另一个对象的树类型列表,每个对象都有一个自定义标签作为类的一部分。 例如:

public class item
{
   public CustomLabel label = new CustomLabel();
   public List<item> children = new List<item>();
}

我在这些类中设置标签,然后将它们推入YAxis(chartArea) 例如:

item.label.text = "some text";
chartArea.YAxis.CustomLabels.Add(item.label);

此外,在代码中我需要更改标签的文本,以便访问我的类标签(验证类是相同的)

item.label.text = "new text";

但是当我检查CustomLabels List时,文本值仍然是旧值

(chartArea.YAxis.CustomLabels [0] .Text ==“some text”)

我不明白为什么会这样。我认为实例化对象是引用。因此,文本应该是“新文本”;

我有可折叠的标签,这就是我需要这样做的原因。请帮我理解。

1 个答案:

答案 0 :(得分:1)

是的,它们是对象,但在添加它们时,您不仅仅是将它们作为参考添加它们,而且它们似乎被复制到图表中。

(很难说,因为MSChart的来源似乎并不存在。)

所以:您需要 重新分配CustomLabels 更改其属性。

无需再次添加它们,只需再次分配即可。为此,您需要跟踪您拥有的标签。只有一个这很简单:

chart.ChartAreas[0].AxisX.CustomLabels[0] = yourItem.Label;

要更改Text

chart.ChartAreas[0].AxisX.CustomLabels[0].Text = yourItem.Label.Text;

此行为与DataPoints不同。在那里你可以保留一个参考,更改值,它会显示..

<强>更新

出于好奇,我对我能想到的所有其他ChartElement类型进行了相同的测试,即Annotations, ChartAreas, Legends, Series, Titles, LegendCellColumns and DataPoints。事实证明它们都被正确引用,只有当CustomLabels Add时才会引用 ...push_back(Node(this)); 。{/ p>

调查CustomLabelsCollection Class我认为没有理由这样做..

以下是小测试的前后视图:

enter image description here enter image description here