请承担我的解释,因为代码在我无法复制的计算机上。
我在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”)
我不明白为什么会这样。我认为实例化对象是引用。因此,文本应该是“新文本”;
我有可折叠的标签,这就是我需要这样做的原因。请帮我理解。
答案 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我认为没有理由这样做..
以下是小测试的前后视图: