当前位置:  开发笔记 > 编程语言 > 正文

c#:在运行时创建新设置

如何解决《c#:在运行时创建新设置》经验,为你挑选了3个好方法。

c #windows窗体:如何在运行时创建新设置,以便将它们永久保存为Settings.Default .-- values?



1> John..:

以防万一对任何人都很重要:

您可以动态添加设置,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.


re:如何设置属性类型?**property.PropertyType = typeof(YourObject);**

2> 小智..:

除了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();
}



3> OregonGhost..:

由于Settings类是在构建时生成的(或者实际上,每当您从设计器中更新设置文件时),您都无法将此机制用于动态方案.但是,您可以向应用程序设置添加一些集合或字典,并动态修改它们.

推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有