我使用设置时非常新,并尝试学习如何有效地使用它们。在我的应用程序中,我有一个包含自定义对象的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中的对象。
答案 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);
}
}
}
希望这可以帮助其他新手解决问题。