Добавление свойства пользовательских настроек во время выполнения (Winforms)
Я использую C#, формы win и.net 2.0
Я пытаюсь добавить свойство в файл пользовательских настроек во время выполнения, но не могу просмотреть это добавленное свойство в файле 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();
}
И это вызывает функцию
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);
}
Что я делаю не так? Любое предложение будет оценено Спасибо
2 ответа
Я думаю тебе лучше написать кастом struct
или же class
с настройками вашего приложения и использовать сериализацию для загрузки и сохранения - это гораздо более понятно и актуально в вашем случае.
Вы не можете добавлять или удалять свойства в.Net файлы настроек во время выполнения. В Интернете есть несколько хитростей, но ни один из них не применим и не является решением того, что вы хотите.
Файлы настроек не предназначены для этой цели. Эти файлы предназначены для заполнения во время разработки и только для "чтения" или "изменения" во время выполнения.
Причина заключается в том, что при создании и редактировании файла настроек в конструкторе (двойным щелчком по файлу настроек в обозревателе решений или выбором вкладки настроек в пункте меню свойств проекта) Visual Studio создает класс ApplicationSettings (производный от класса ApplicationSettingsBase), который имеет члены данных для любого поля настройки, которое вы создали, плюс некоторые дополнительные атрибуты (например, [ApplicationScopedSetting] или [UserScopedSetings]). Во время выполнения среда выполнения.Net взаимодействует с файлами настроек с помощью этого класса. Поэтому, когда вы пытаетесь добавить свойства во время выполнения, у вас нет вспомогательных файлов и атрибутов в классе ApplicationSettings, и CLR не знает, что с ними делать.
Вывод: файл настроек имеет определенное использование и не подходит для произвольного сохранения конфигурации в вашем приложении. Попробуйте использовать файлы XML, которые полностью поддерживают все, что вам нужно, от чтения, записи, добавления, удаления, обновления свойств базовых типов (string, char, int и т. Д.) До поддержки сложных объектов с использованием XML.Seriliaization.