2017-02-03 4 views
2

Ich habe eine Klasse mit Eigenschaften als Objekte mehr Klassen. Zum Beispiel:Wie können die Standardwerte für die Eigenschaften der Komponente im PropertyGrid zurückgesetzt werden?

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

Wenn ich will die Menschen Klasse zurücksetzen, schreibe ich diese:

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

Im Fall von Sach geschieht alles perfekt Sity und Objekte Mensch nichts passiert. So, hier ist, wie auf die Standardwerte dieser Eigenschaften zurückgesetzt werden?

Antwort

0

Sie müssen .Attributes nicht überprüfen. Der Schlüssel hier ist pr.CanResetValue(obj). Wenn das true zurückgibt, können Sie pr.ResetValue(obj) aufrufen. Wenn es false zurückgibt, sollten Sie es nicht versuchen. Es gibt mehrere Ansätze für Resets Unterstützung - einschließlich:

  • [DefaultValue]
  • void Reset{membername}()
  • einer benutzerdefinierten PropertyDesciptor

Ich schlage vor, Sie versuchen, hinzufügen:

void ResetHuman() { Human = null; } 

Dann sollten Sie finden dass pr.CanResetValue(obj) 0 zurückgibtund pr.ResetValue(obj) löscht den Wert.

+0

Tatsache ist, dass ich die Werte der Reset-Methode nicht nur für eine Klasse verwenden möchte. Daher ist es in jeder Klasse erforderlich, eine Methode Reset {Elementname} hinzuzufügen? – Nasay

Verwandte Themen