c # - Sådan nulstilles standardværdierne for egenskaberne for komponenten i PropertyGrid?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en klasse med egenskaber som objekter flere klasser. For eksempel:


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


Hvis jeg vil nulstille Mennesker klassen, skriver jeg dette:


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


I tilfælde af ejendom foregår alt perfekt Sity, og for ejendomme Mennesket sker ingenting. Så her kan du nulstille standardværdierne for disse egenskaber?

Bedste reference


Du behøver ikke at tjekke .Attributes. Nøglen her er pr.CanResetValue(obj). Hvis den returnerer true, kan du ringe pr.ResetValue(obj). Hvis den vender tilbage false, Du bør ikke prøve. Der er flere tilgange til understøttelse af nulstillinger - herunder:



  • [DefaultValue]

  • void Reset{membername}()

  • en brugerdefineret PropertyDesciptor



Jeg foreslår, at du forsøger at tilføje:


void ResetHuman() { Human = null; }


Så skal du opdage, at pr.CanResetValue(obj) returnerer true og pr.ResetValue(obj) sletter værdien.