John Sathish Tamilarasu Ответов: 4

Добавление элемента для динамического выпадающего списка


private void btnok_Click(object sender, EventArgs e)
{
    string name = tbxname.Text;
    Form2 ff = new Form2();
    ff.comboBox1.Items.Add(name);
    ff.ShowDialog();
}


Приведенный выше код присутствует в форме 1. btnok.
Я хочу добавить какой-то элемент в form2.combobox1 через этот код(combobox в form2 объявлен как public).он обновляется в элементах combobox.Но когда мы закрываем решение и снова запускаем его,снова остается только один элемент,старый элемент исчез.как мне этого достичь?
Ваша помощь необходима.

4 Ответов

Рейтинг:
2

#realJSOP

Вы знаете, что на самом деле вам нужно установить выбранный элемент в поле со списком, прежде чем он появится в поле редактирования, не так ли?

ff.comboBox1.SelectedIndex = 0;

или

ff.comboBox1.SelectedItem = name;


Рейтинг:
2

Henry Minute

В дополнение к ответу Джона, ComboBox в форме 2 должен быть изменен на accessor public.

Это может помочь вам получить более конкретный ответ, если вы скажете нам, что на самом деле означает "но это не работает". В каком смысле это не работает?


Рейтинг:
2

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);
                }
            }


Во-первых, если вы попытаетесь сохранить файл в конфиденциальных папках, ваша программа может быть выполнена с повышенными правами (т. е. запускаться от имени администратора)
Конечно, эти коды-почти псевдокоды. Для повышения производительности сравните существующие строки в текстовом файле и выпадающем списке и записывайте/удаляйте только в случае необходимости.


Dalek Dave

хороший ответ.

Рейтинг:
0

ROGDEV

Если я правильно понимаю, вы используете кнопку на form1 для динамического добавления дополнительного элемента в form2.combobox во время выполнения. Однако когда вы "закрываете решение и запускаете его снова", в выпадающем списке form2 отображается только один элемент (который вы предположительно добавили во время разработки или загрузки приложения)?

Если вы хотите динамически добавить элемент во второй раскрывающийся список и сохранить данные во время перезапуска приложения, вам нужно будет сохранить данные в файле или базе данных, а затем повторно загрузить или привязать comboboxes к указанному файлу/базе данных каждый раз, когда загружается приложение.

Пожалуйста, уточните свой вопрос...


John Sathish Tamilarasu

То,что вы поняли, совершенно верно, но я не совсем ясно понимаю ваше решение.Если возможно, приведите мне пример с кодом.Спасибо!

ROGDEV

Здравствуйте, вам нужно решить, как вы хотите сохранить новый элемент, который вы добавляете в поле со списком. Каждый раз, когда вы запускаете/останавливаете свое приложение, эти динамически добавляемые элементы будут стираться из памяти, если вы не сохраните их на диске или в базе данных. Решите, нужно ли хранить его в базе данных (Access, SQL Server) или на диске (XML, Dataset, flat text, CSV и т. д.). Это зависит от вас и от того, как вы решите построить свое приложение...

Вот несколько ссылок, которые укажут вам правильное направление..

http://dotnet.itags.org/dotnet-c-sharp/200224/
http://www.vbdotnetforums.com/windows-forms/27422-load-combo-box-text-file.html

http://stackoverflow.com/questions/376622/c-how-do-you-save-a-list-of-items-like-a-combobox-to-the-net-settings-file

http://msdn.itags.org/visual-csharp/52804/

http://bytes.com/topic/c-sharp/answers/252379-combo-box-load-table

Удачи