2017-02-03 13 views
2

私はオブジェクトとしてプロパティを持つクラスを持っています。例えば:私は人間クラスをリセットしたい場合は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を発生します。では、これらのプロパティのデフォルト値にリセットする方法はありますか?

答えて

0

.Attributesを確認する必要はありません。ここの鍵はpr.CanResetValue(obj)です。それがtrueを返す場合は、pr.ResetValue(obj)に電話することができます。 falseを返す場合は試してはいけません。リセットをサポートするための複数のアプローチがあります - を含む:そして、あなたが見つける必要があり

void ResetHuman() { Human = null; } 

を:

  • [DefaultValue]
  • void Reset{membername}()
  • カスタムPropertyDesciptor

私はあなたが追加してみてください示唆しますそのpr.CanResetValue(obj)は0を返しますおよびpr.ResetValue(obj)は値をクリアします。

+0

実際、リセットメソッドの値を使用したいのは、1つのクラスだけではないということです。したがって、各クラスでReset {membername}メソッドを追加する必要がありますか? – Nasay

関連する問題