MCY
Как и в предыдущих ответах, динамически вставленные элементы исчезнут, если программа перезапустится. Это просто потому, что они не записываются на физический диск и будут удалены, как только сборщик мусора поймет, что их работа выполнена.
Самый простой способ избежать этого-записать содержимое combobox в текстовый файл (если вы не хотите вмешиваться в базы данных) и сохранить этот файл (как comboboxName.txt например). Во второй раз, когда программа откроется и покажет form2, сначала добавьте элементы текстового документа в поле со списком.
/*write contents of a combobox to a file in a directory. the file location can be a predefined one or you may prompt the user for location by savefiledialog */
//this one saves to MyDocuments
//use on OnClosing event of the form - first delete existing file by system.IO [File.Delete - not in this code]
StringBuilder sb = new StringBuilder();
foreach(var item in ComboboxName.Items)
{
sb.AppendLine(item.ToString());
}
string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
using(StreamWriter _sw = new StreamWriter(folderPath+@"\ComboboxName.txt"))
{
_sw.Write(sb.ToString());
}
//this one reads it from my documents and fills the combobox
//use on loading event of the form
string filePath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)+@"\ComboboxName.txt";
using (StreamReader sr = new StreamReader(filePath)
{
String line;
while ((line = sr.ReadLine()) != null)
{
ComboboxName.Items.Add(line);
}
}
Во-первых, если вы попытаетесь сохранить файл в конфиденциальных папках, ваша программа может быть выполнена с повышенными правами (т. е. запускаться от имени администратора)
Конечно, эти коды-почти псевдокоды. Для повышения производительности сравните существующие строки в текстовом файле и выпадающем списке и записывайте/удаляйте только в случае необходимости.