C#:如何将像Combobox这样的项目列表保存到.NET设置文件中?
答案 0 :(得分:9)
Settings Designer允许您使用的唯一集合类型是System.Collections.ArrayList。如果使用ArrayList,则其所有元素的类型必须是可序列化的(具有[Serializable]属性或实现System.Runtime.Serialization.ISerializable。)
这里有一些代码可以将来自SettingsList中的ArrayList(名为cboCollection)的数据导入组合框并返回。
private void Form1_Load(object sender, EventArgs e)
{
if (Settings.Default.cboCollection != null)
this.comboBox1.Items.AddRange(Settings.Default.cboCollection.ToArray());
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
ArrayList arraylist = new ArrayList(this.comboBox1.Items);
Settings.Default.cboCollection = arraylist;
Settings.Default.Save();
}
//A button to add items to the ComboBox
private int i;
private void button1_Click(object sender, EventArgs e)
{
this.comboBox1.Items.Add(i++);
}
答案 1 :(得分:4)
如果您正在谈论应用程序用户设置,我将遍历组合框并将值保存在分隔的字符串中:
StringBuilder sb = new StringBuilder();
foreach(var item in combo.Items){
sb.Append(item.ToString() + ";");
}
Properties.Settings.MyListSetting = sb.ToString();
如果上述代码不完美,请原谅,这只是一个例子。
希望有所帮助!
答案 2 :(得分:1)
Windows窗体对象不可序列化。因此,您无法使用binaryformatter将它们序列化并存储在文件中。您需要手动将组合框值存储在文件中。
string comboboxFileName = @"c:\workDir\settings.settings";
private void saveComboboxInFile (String comboboxFileName )
{
//--------------------------------------------------------
//- Store the combobox values in a file. 1 value = 1 line
//--------------------------------------------------------
try
{
using (StreamWriter comboboxsw = new StreamWriter(comboboxFileName))
{
foreach (var cfgitem in comboBox.Items)
{
comboboxsw.WriteLine(cfgitem);
}
} // End Using`
}
catch (Exception e)
{
//process exception
}
}
private void reloadCombboxFromFile (string comboboxFileName )
{
//-------------------------------------------------
//- Read the values back into the combobox
//-------------------------------------------------
try
{
using (StreamReader comboboxsr = new StreamReader(comboboxFileName))
{
while (!comboboxsr.EndOfStream)
{
string itemread = comboboxsr.ReadLine();
comboBox.Items.Add(itemread);
}
} // End Using
}
catch (DirectoryNotFoundException dnf)
{
// Exception Processing
}
catch (FileNotFoundException fnf)
{
// Exception Processing
}
catch (Exception e)
{
// Exception Processing
}
}
答案 3 :(得分:0)
您可以使用 System.Collections.Specialized.StringCollection
类型来保存 ComboBox 项目。
首先在设置设计器中创建这种类型的变量,例如CboItems。
阅读项目:
if (Properties.Settings.Default.CboItems != null)
comboBox1.Items.AddRange(Properties.Settings.Default.CboItems.Cast<string>().ToArray());
要保存项目:
var items = new System.Collections.Specialized.StringCollection();
items.AddRange(comboBox1.Items.Cast<string>().ToArray());
Properties.Settings.Default.CboItems = items;
Properties.Settings.Default.Save();