2

タイプのProperties.Settings名前付きエントリを追加しました。これを使用してリストビューから設定にアイテムを保存しているため、アプリケーションが再起動すると、以前に保存されたアイテムが ListView に再度読み込まれます。ListViewItems の項目名とタグのみを保存しています。strColNameValueCollection

しかし、説明できない奇妙なことが起こっています。

このコードを使用して、アイテムを設定に保存しています。

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保存されていないかのようにロードが機能しません。

ここで何が欠けていますか?

現在設定をロードしている方法:

ロードの呼び出しですが、null かどうかのチェックですでに失敗しているようです

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 を追加しましたが、実際にはアプリケーションのビルド時に追加されません。構成ファイルを開くと、設定がありません。問題はここにあると思いますが、今すぐ追加する方法を理解する必要があります。

ファイルを調べると、「 NameValueCollection Settings.Designer.cs」のタイプに対してこの部分が間違っているように見えます。

    [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