如何重置PropertyGrid中组件属性的默认值?

我有一个类的属性作为对象的任何更多的类。 例如:

public Class Humans { public Person Human {get; set;} [DefaulValue("New York")] public string Sity {get; set;} } public struct Person { [DefaulValue("Name")] public string Name {get; set;} [DefaulValue("Surname")] public string Surname {get; set;} } 

如果我想重置人类,我写这个:

  PropertyDescriptorCollection props = TypeDescriptor.GetProperties(Humans); foreach (PropertyDescriptor pr in props) { if (pr.Attributes.OfType<DefaultValueAttribute>().Any()) { pr.ResetValue(obj); } } 

在财产的情况下,一切都完全发生Sity,对于财产人类什么也没有发生。 那么这里是如何重置为这些属性的默认值?

你不需要检查。 .Attributes 。 这里的关键是pr.CanResetValue(obj) 。 如果返回true ,则可以调用pr.ResetValue(obj) 。 如果返回false ,则不应该尝试。 支持重置有多种方法 – 包括:

  • [DefaultValue]
  • void Reset{membername}()
  • 一个自定义PropertyDesciptor

我建议你尝试添加:

 void ResetHuman() { Human = null; } 

然后你应该发现pr.CanResetValue(obj)返回truepr.ResetValue(obj)清除该值。