C#:如何将像Combobox这样的项目列表保存到.NET设置文件中?

时间:2008-12-18 01:25:50

标签: c#

C#:如何将像Combobox这样的项目列表保存到.NET设置文件中?

4 个答案:

答案 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();