2011-02-16 1 views
2

Я реализовал свой собственный класс, который наследуется от класса SettingsProvider. Если значение, которое я получаю, не было установлено пользователем, то есть это первый раз, когда программа запускается, я пытаюсь получить значение по умолчанию. Проблема, которую я вижу, - это когда значение по умолчанию извлекается из параметра SettingsProperty, которое возвращается в виде строки. Я попытался добавить код, который преобразует элемент, но у меня возникают проблемы при преобразовании System.Drawing.Colors и я получаю сообщение об ошибке «Недопустимый листинг из« System.String »в« System.Drawing.Color ».».Custom SettingsProvider и получение значения по умолчанию

Вот пример кода, который я использую, чтобы получить значение по умолчанию:

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 вам необходимо создать экземпляр TypeConverter для параметров settings.PropertyType. Этот код работает:

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

 Смежные вопросы

  • Нет связанных вопросов^_^