2

Properties.Settings我在命名strCol中添加了一个类型为的条目NameValueCollection。我正在使用它来将列表视图中的项目保存到设置中,这样当应用程序重新启动时,ListView 会再次使用之前保存的项目重新填充。我只存储 ListViewItems 中的项目名称和标签。

但是发生了一些奇怪的事情,我无法解释。

我正在使用此代码将项目保存到设置中:

NameValueCollection nvCol = new NameValueCollection();
foreach (ListViewItem lviP in lvParmNames.Items)
{
    nvCol.Add(lviP.Text, lviP.Tag.ToString());
}
Properties.Settings.Default.strCol = nvCol;
Properties.Settings.Default.Save();

出于某种原因,只要应用程序仍然处于活动状态,保存和加载设置就可以正常工作。但是,当应用程序已关闭并重新启动时,加载不起作用,就好像NameValueCollection没有保存一样。

我在这里想念什么?

我目前如何加载设置:

加载调用,但在检查是否为空时似乎已经失败

if (Properties.Settings.Default.strCol != null)      
{        
    NameValueCollection nv = Properties.Settings.Default.strCol;
    foreach (string key in nv)
    {
        try
        {
            var value = nv[key];
            ListViewItem lvi = new ListViewItem(key);
            lvi.Tag = value;
            lvFamNames.Items.Add(lvi);
        }
        catch (Exception ex)
        {
            TaskDialog.Show("Error", "Error while parsing Family Names from saved settings. \n" + ex.Message);
        }
    }
}

刚注意到一件事:

设置

尽管我在部分中添加了 NameValueCollection,但实际上在构建应用程序时并未添加。当我打开配置文件时,设置不存在。所以我想问题就在这里,虽然现在我需要弄清楚如何添加它。

查看Settings.Designer.cs文件,我猜这部分对于“NameValueCollection”的类型看起来是错误的:

    [global::System.Configuration.UserScopedSettingAttribute()]
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    public global::System.Collections.Specialized.NameValueCollection strColExcelFamNames {
        get {
            return ((global::System.Collections.Specialized.NameValueCollection)(this["strCol"]));
        }
        set {
            this["strCol"] = value;
        }
    }
4

0 回答 0