c #windows窗体:如何在运行时创建新设置,以便将它们永久保存为Settings.Default .-- values?
以防万一对任何人都很重要:
您可以动态添加设置,Settings.Default.Properties.Add(...)
并在保存后将这些设置保留在本地存储中(我将这些条目反映在漫游文件中).
然而,似乎动态添加的设置在Settings.Default.Properties
再次加载后在集合中丢失.
我可以通过在首次访问之前添加动态属性来解决此问题.示例(注意我从基本设置"创建"我的动态设置):
// create new setting from a base setting: var property = new SettingsProperty(Settings.Default.Properties[""]); property.Name = " "; Settings.Default.Properties.Add(property); // will have the stored value: var dynamicSetting = Settings.Default[" "];
我不知道微软是否支持这一点,因为该主题的文档非常少见.
问题也在这里描述http://www.vbdotnetforums.com/vb-net-general-discussion/29805-my-settings-run-time-added-properties-dont-save.html#post88152这里提供了一些解决方案http ://msdn.microsoft.com/en-us/library/saa62613(v = VS.100).aspx(请参阅社区内容 - 标题"如何创建/保存/加载动态(运行时)设置").但这是VB.NET.
除了John的保存解决方案之外,正确的加载方法是添加属性,然后对您的设置执行Reload().
你的动态设置就在那里!
有关完整示例,对于在库代码中使用有效,因为您可以传递设置.
ApplicationSettingsBase settings = passed_in; SettingsProvider sp = settings.Providers["LocalFileSettingsProvider"]; SettingsProperty p = new SettingsProperty("your_prop_name"); your_class conf = null; p.PropertyType = typeof( your_class ); p.Attributes.Add(typeof(UserScopedSettingAttribute),new UserScopedSettingAttribute()); p.Provider = sp; p.SerializeAs = SettingsSerializeAs.Xml; SettingsPropertyValue v = new SettingsPropertyValue( p ); settings.Properties.Add( p ); settings.Reload(); conf = (your_class)settings["your_prop_name"]; if( conf == null ) { settings["your_prop_name"] = conf = new your_class(); settings.Save(); }
由于Settings类是在构建时生成的(或者实际上,每当您从设计器中更新设置文件时),您都无法将此机制用于动态方案.但是,您可以向应用程序设置添加一些集合或字典,并动态修改它们.