设置未正确存储

时间:2015-06-24 13:54:57

标签: c# listbox settings

我使用设置时非常新,并尝试学习如何有效地使用它们。在我的应用程序中,我有一个包含自定义对象的Listbox。关闭我的应用程序时,我想将ListBoxItems保存到我的设置。我尝试使用解决方案described here

自定义对象(ConfigItem):

[Serializable()]    
public class ConfigItem
{
    public string type { get; set; }
    public string address { get; set; }

    public ConfigItem(string _type, string _address)
    {
        type = _type;
        address = _address;
    }
}

在我的设置中,我有一个参数" Sensors"应该填充的ArrayList类型:

<Setting Name="Sensors" Type="System.Collections.ArrayList" Scope="User">
    <Value Profile="(Default)" />
</Setting>

我尝试了以下内容来获取存储的ListBoxItem:

Properties.Settings.Default.Sensors = new ArrayList(ConfigList.Items);
Properties.Settings.Default.Save(); 

保存设置后,我打开了设置,但未添加任何数据:

<setting name="Sensors" serializeAs="Xml">
    <value /> 
</setting>

我不知道我走错了路。此外,我无法找到一种更优雅的方式来存储ListBox中的对象。

1 个答案:

答案 0 :(得分:0)

由于设置不是保存我的用户特定对象的正确位置,我现在使用StreamReader和StreamWriter:

保存我的设置:

private void SaveSettings()
{            
    var SensorList = new ArrayList();
    foreach(var item in ConfigList.Items)
    {
        SensorList.Add(item);
    }
    Stream stream = File.Open(@"K:\\Setting.myfile", FileMode.Create);
    BinaryFormatter bformatter = new BinaryFormatter();
    bformatter.Serialize(stream, SensorList);
    stream.Close();
}

并加载设置:

private void LoadSettings()
{
    using (Stream stream = File.Open(@"K:\\Setting.myfile", FileMode.Open))
    {
        BinaryFormatter bformatter = new BinaryFormatter();
        var Sensors = (ArrayList)bformatter.Deserialize(stream);
        foreach (var item in Sensors)
        {
            ConfigList.Items.Add(item);
        }
    }
}

希望这可以帮助其他新手解决问题。