与PropeprtyGrid

时间:2018-07-02 19:58:12

标签: c# reflection attributes propertygrid

当此值不同于为此特定值设置的DefaultValueAttribute时,WinForms PropertyGrid控件可以使用DefaultValueAttribute以粗体显示某些值。

我们需要能够在运行时更改此DefaultValueAttribute来更改这些默认值。我已经尝试过使用反射,直接设置此属性的“值”字段,并继承DefaultValueAttribute类以创建将值设置为新值的方法(DefaultValueAttribute具有受保护的方法SetValue(对象值),该方法可以称为)。即使新值由attribute.Value属性反映,这两种方法均无效。

我们正在使用BrowsableAttribute(以在运行时显示和隐藏PropertyGrid中的设置)做完全相同的事情。两者都工作正常; PropertyGrid会更新以反映新属性。由于某种原因,PropertyGrid完全忽略对DefaultValueAttribute的更改。

我读到这些值是“在编译时固定的”。我不确定我理解这是什么意思,因为这不能解释在运行时更改其他属性时可以正常工作的行为。

有人知道DefaultValueAttribute有什么区别吗?是否有解决方法? (我知道ShouldSerializeProperty()方法。这对于我们的应用程序不起作用,因为对象已被序列化)。 我们只需要能够为类中的每个属性设置一些“默认值”,以便每当某个属性不同于该默认值时,PropertyGrid都会以粗体绘制此特定设置。

任何帮助将不胜感激!

0 个答案:

没有答案