2013-11-11 5 views
0

Я использую C#, выиграть формы и .net 2.0Добавление пользователя настройки свойств во время выполнения (WinForms)

Я пытаюсь добавить свойство в пользовательские настройки файла во время выполнения, но я не в состоянии рассмотреть, что добавлено свойство в файле settings.settings в определенном месте, т.е. файл существует, но свойство не добавляется

Я не получаю сообщение об ошибке, когда я называю это свойство он работает Используя этот код ниже

MessageBox.Show(***********.Properties.Settings.Default.Properties["NewProperty"].DefaultValue); 

Я написал это следующий код Вызов функции

clCommonFuncation cl = new clCommonFuncation(); 
     if (***********.Properties.Settings.Default.Properties["NewProperty"] == null) 
     { 
      cl.addPropertyinSettingsFile("NewProperty", 
      ***********.Properties.Settings.Default.Providers, 
      ***********.Properties.Settings.Default.Providers["LocalFileSettingsProvider"], 
      ***********.Properties.Settings.Default.Properties, 
      typeof(string),"ASD",null); 
      ***********.Properties.Settings.Default.Save(); 
      ***********.Properties.Settings.Default.Reload(); 
     } 

И это звонит funaction

public void addPropertyinSettingsFile(string settingName, 
     SettingsProviderCollection settingsProviderCollection, 
     SettingsProvider settingsProvider, 
     SettingsPropertyCollection settingPrpertyCollection, 
     Type dataType, 
     object defaultValue, 
     object settingDefault) 
    { 
     SettingsProperty lvSettingProperty = new SettingsProperty(settingName); 
     lvSettingProperty.DefaultValue = defaultValue; 
     lvSettingProperty.IsReadOnly = false; 
     lvSettingProperty.PropertyType = dataType; 
     lvSettingProperty.Provider = settingsProvider; 
     lvSettingProperty.SerializeAs = SettingsSerializeAs.String; 
     lvSettingProperty.Name = settingName; 
     lvSettingProperty.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute), 
      new System.Configuration.UserScopedSettingAttribute()); 
     settingPrpertyCollection.Add(lvSettingProperty);    
    } 

Что это я делаю не так? Любое предложение будет оценено Спасибо

ответ

1

Я думаю, вы бы лучше написать пользовательский struct или class с настройками приложения и использовать сериализации для загрузки и сохранения - это гораздо более четкой и актуальной в вашем случае ,

0

Вы не можете добавлять или удалять свойства в .Net Файлы настроек во время выполнения. В Интернете есть некоторые трюки, но ни одно из них не применимо и решение того, что вы хотите.

Файлы настроек не предназначены для такой цели. Эти файлы были спроектированы так, чтобы их заполняли во время разработки и только «читали» или «модифицировали» во время выполнения.

Причина в том, что при создании и редактировании файла настроек в дизайнере (двойным щелчком по файлу настроек в проводнике решений или выборе вкладки настроек в элементе свойств проекта) Visual studio создает класс ApplicationSettings (Производный из класса ApplicationSettingsBase) который содержит данные для любого поля настройки, которое вы создали, плюс некоторые дополнительные атрибуты (например, [ApplicationScopedSetting] или [UserScopedSetings]). Во время выполнения среда выполнения .Net взаимодействует с файлами seetings, используя этот класс. Поэтому, когда вы пытаетесь добавить свойства во время выполнения, у вас нет файлов и атрибутов поддержки в классе ApplicationSettings, и CLR не знает, что с ними делать.

Заключение: Файл настроек имеет конкретное использование и не подходит для любой произвольной конфигурации в вашем приложении. Попробуйте использовать файлы XML, которые полностью поддерживают то, что вы хотите от чтения, записи, добавления, удаления, обновления свойств базовых типов (string, char, int и т. Д.) Для поддержки сложных объектов с использованием XML.Seriliazation.

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