Проблемы с добавлением элементов и расширением списка коллекций checklistbox в форме Windows в С#

Это может показаться глупым вопросом. У меня есть текстовое поле, которое можно использовать для добавления элементов в checklistbox во время выполнения в форме Windows. Я использую С#. Он отлично работает во время выполнения. Элемент добавляется и прочее, когда форма открыта. Но когда я закрываю и снова открываю форму, я не вижу добавленный элемент в списке ChecklistBox. Заметьте, я не использую источник данных и не хочу. Я бы не хотел ничего жестко кодировать и предпочел бы использовать ввод текстового поля в форме в качестве переменной для ввода в список коллекций. Я не мог найти способ расширить мои параметры checklistbox. Любая помощь будет оценена.


person Community    schedule 06.07.2009    source источник
comment
А куда вы сохраняете добавленные предметы?   -  person Adrian Godong    schedule 06.07.2009


Ответы (3)


Как вы открываете форму? Это что-то вроде:

FormName form = new FormName();
form.Show()

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

person djdd87    schedule 06.07.2009
comment
Я использую обработчики событий form_load и form_closed. У меня есть программа, которая повторно заполняет проверенные элементы в списке checklistbox через свойство checkedindices, когда я запускаю форму, чтобы пользователю не приходилось каждый раз перепроверять флажки во время выполнения. - person ; 06.07.2009
comment
Да, но как вы открываете форму? Form_Load происходит, когда вы открываете форму, а Form_Closed происходит, когда вы ее закрываете. Пожалуйста, опубликуйте код, чтобы дать нам лучший пример. - person djdd87; 06.07.2009

Пусть ваша форма принимает ref List<string> values в качестве параметра. Затем сделайте это как BindingSource для CheckedListBox.

Вот код:

class MyForm : Form {
        List<string> values;
        BindingSource source;

        public MyForm()
        {
            InitializeComponent();
        }

        public MyForm(ref List<string> values):this()
        {
            if (values == null)
                values = new List<string>();

            this.values = values;

            checkedListBox1.DisplayMember = "Value";
            checkedListBox1.ValueMember = "Value";
            source = new BindingSource(this.values, null);
            checkedListBox1.DataSource = source;
        }

        private void AddItemButton_Click(object sender, EventArgs e)
        {
            this.source.Add(textBox1.Text);
            textBox1.Text = string.Empty;
        }
}
person Vivek    schedule 06.07.2009

person    schedule
comment
Возможно, вы захотите почистить это, это совершенно нечитаемо. Отредактируйте сообщение и отметьте код как код правильно. Кроме того, покажите код, в котором вы показываете [т.е. .Show() или .ShowDialog()] форму. - person djdd87; 07.07.2009