2011-02-16 16 views
2

SettingsProviderクラスから継承する独自のクラスを実装しました。私が検索している値がユーザによって設定されていない場合、すなわち、プログラムがはじめて起動する場合、私はデフォルト値を取得しようとします。私が見ている問題は、デフォルト値がSettingsPropertyから取得され、文字列として返される場合です。私は項目を変換するいくつかのコードを追加しようとしましたが、System.Drawing.Colorsを変換するときに問題が発生しています。 "System.Drawing.Color 'に' System.String 'から' Invalid cast 'を受け取りました。どのように私はきちんと正しい型にデフォルト値を変換することができカスタム設定プロバイダとデフォルト値の取得

private object GetDefaultValue(SettingsProperty setting) 
    { 
     if (setting.PropertyType.IsEnum) 
      return Enum.Parse(setting.PropertyType, setting.DefaultValue.ToString()); 

     // Return the default value if it is set 
     if (setting.DefaultValue != null) 
      return Convert.ChangeType(setting.DefaultValue, setting.PropertyType); 
     else // If there is no default value return the default object 
      return Activator.CreateInstance(setting.PropertyType); 
    } 

:ここ

は、私は、デフォルト値を取得するために使用していますコードの例ですか?

答えて

1

だから私は答えを見つけた。 Convert.ChangeTypeを使用する代わりに、settings.PropertyTypeに対してTypeConverterインスタンスを実際に作成する必要があります。このコードは動作します:

private object GetDefaultValue(SettingsProperty setting) 
    { 
     if (setting.PropertyType.IsEnum) 
      return Enum.Parse(setting.PropertyType, setting.DefaultValue.ToString()); 

     // Return the default value if it is set 
     // Return the default value if it is set 
     if (setting.DefaultValue != null) 
     { 
      System.ComponentModel.TypeConverter tc = System.ComponentModel.TypeDescriptor.GetConverter(setting.PropertyType); 
      return tc.ConvertFromString(setting.DefaultValue.ToString()); 
     } 
     else // If there is no default value return the default object 
     { 
      return Activator.CreateInstance(setting.PropertyType); 
     } 
    } 
関連する問題