我想使用StringCollection作为应用程序设置,但是在阅读它不是问题时,我发现没有存储设置。
如何使它有效?任何解决方法?这有什么问题?
我正在使用的代码:
private static void AddToRecentProfiles(string path)
{
if (SpellCaster3.Properties.Settings.Default.RecentProfiles == null)
SpellCaster3.Properties.Settings.Default.RecentProfiles = new StringCollection();
int index = SpellCaster3.Properties.Settings.Default.RecentProfiles.IndexOf(path);
if (index >= 0)
SpellCaster3.Properties.Settings.Default.RecentProfiles.Swap(index, 0);
else
SpellCaster3.Properties.Settings.Default.RecentProfiles.Insert(0, path);
if (SpellCaster3.Properties.Settings.Default.RecentProfiles.Count > SpellCaster3.Properties.Settings.Default.MaxRecentProfiles)
SpellCaster3.Properties.Settings.Default.RecentProfiles.RemoveAt(SpellCaster3.Properties.Settings.Default.RecentProfiles.Count - 1);
SpellCaster3.Properties.Settings.Default.Save();
OnRecentProfilesChanged(SpellCaster3.Properties.Settings.Default.RecentProfiles, EventArgs.Empty);
}
答案 0 :(得分:10)
我自己找到了解决方案,问题是如果使用“new”关键字创建StringCollection并保存设置,则不会存储它们。
解决此问题的方法是“强制”应用程序设置设计人员为您创建它,如何做到这一点?好吧,这很简单,把stringcollection作为类型并插入2/3字符串。按确定。然后再次编辑此值并删除所有字符串,使其“创建但空”。
在此之后,您可以通过添加/删除字符串并保存设置来使用它。你肯定它不会是空的!
答案 1 :(得分:4)
Application settings可以在应用程序级别和用户级别进行作用,您只能在用户级别写入设置,因此如果您在应用程序级别有StringCollection
作用域,则只能读取您在编译时定义的值,并且在下次启动应用程序时,在运行时添加到集合将不起作用。
如果希望更改在应用程序运行之间传播,则可以在用户级别进行范围调整。
答案 2 :(得分:0)
发生这种情况的另一个原因是,如果您认为存储 StringCollection
而不是每次都调用该属性是个好主意。
例如,我所做的就是为了为此类设置创建抽象基础:
public class RecentFilePropertyRepository
{
private readonly StringCollection collection = RecentFiles.Default.MostRecentFiles;
public StringCollection MostRecentFiles => collection;
public void Save()
{
RecentFiles.Default.Save();
}
}
由于某种我不知道的原因,从我的属性更新 StringCollection
导致仅保存了第一个更新。
我要么不得不在 RecentFiles.Default.MostRecentFiles = collection;
之前调用 Save()
,要么修改我的属性以调用“原始”属性:
public StringCollection MostRecentFiles => RecentFiles.Default.MostRecentFiles;
在内部设置文件返回这样的列表
return ((global::System.Collections.Specialized.StringCollection)(this["MostRecentFiles"]));
索引器调用可能有一些我不知道的含义。
无论如何,我知道这不是 Francesco 的问题,但如果任何其他可怜的人遇到同样的问题,那可能会有所帮助。