【问题标题】:How to reset the default values for the properties of the component in the PropertyGrid?如何重置 PropertyGrid 中组件属性的默认值?
【发布时间】:2017-02-03 11:34:15
【问题描述】:

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

    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;}
    }

如果我想重置 Humans 类,我会这样写:

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

在财产的情况下,一切都完美地发生了,而对于财产人来说,一切都没有发生。那么这里是如何重置这些属性的默认值呢?

【问题讨论】:

    标签: c# windows propertygrid


    【解决方案1】:

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

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

    我建议你尝试添加:

    void ResetHuman() { Human = null; }
    

    那么你应该会发现pr.CanResetValue(obj) 返回true 并且pr.ResetValue(obj) 清除了值。

    【讨论】:

    • 事实上,我想使用reset方法的值并不仅仅针对一个类。因此,需要在每个类中添加一个方法 Reset {membername}?
    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多