我有一个用户控件,它有两个属性与我当前的问题相关。int NumberOfColumns
和string AssignedLabels
。NumberOfColumns 配置 tablelayoutpanel 的列数。AssignedLabels 将是一个 CRLF 分隔的字符串,用于将值分配给 TableLayoutPanel 中包含的标签。当 AssignedLabels 字符串由 CRLF 分隔并且数组项的数量与 NumberOfColumns 的当前值不匹配时,不会进行任何分配。
设计师按字母顺序排列所有内容...因此将AssignedLabels
排在第一位和NumbersOfColumns
第二位。的默认值为NumberOfColumns
。8
如果我在设计器中设置列数2
并为其分配标签,它将被正确序列化:
x.AssignedLabels = "Yes\r\nNo";
x.NumberOfColumns = 2;
但是当它反序列化时,AssignedLabels
首先读取属性,此时NumberOfColumns
仍然是默认值(8),因此不会进行任何分配,因为拆分的字符串与列数不匹配。
当然,我可以将 重命名NumberOfColumns
为类似这样的名字AaaaaaaNumberOfColumns
,这样它将首先被序列化,但这有点不合时宜。是否有任何属性可以控制序列化顺序,或者有其他更透明的方法来解决这个问题?
我认为您正在寻找的是 ISupportInitialize,请在文档中阅读更多信息 https://learn.microsoft.com/en-us/dotnet/api/system.componentmodel.isupportinitialize?view=net-8.0
它允许您控制组件的初始化过程,特别是当某些属性相互依赖并且需要按特定顺序初始化时。