Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Сериализация ListBox


Автор: gambit 3.11.2008, 19:03
Скажите что не так?? Задача: 
открыть файл
десериализировать ListBox
добавить элемент
запакаовать обратно

Код

                ListBox listbox = new ListBox();
                
                FileStream reader = new FileStream("Event.dat", FileMode.Open, FileAccess.Read);
                BinaryFormatter formatter = new BinaryFormatter();
                listbox.Items.Add(((string)formatter.Deserialize(reader)));
                reader.Close();

                listbox.Items.Add(s);
                
                FileStream writer = new FileStream("Event.dat", FileMode.Create, FileAccess.Write);
                int nodesCount = listbox.Items.Count;
                string[] listboxs = new string[nodesCount];
                for (int i = 0; i < nodesCount; i++)
                {
                    listboxs[i] = listbox.Items[i].ToString();
                }
                formatter.Serialize(writer, listboxs);
                writer.Close();

Автор: Bogdan1024 3.11.2008, 20:00
Мэн! Сериализовать листбокс нельзя! Бинарно можно сериализовать лишь то, что помечено атрибутом SerializableAttribute.

Добавлено через 1 минуту и 28 секунд
А, выкупил что ты имеешь ввиду под листбоксом smile

Добавлено через 4 минуты и 34 секунды
Код

listbox.Items.Add(((string)formatter.Deserialize(reader)));

Ды десериализуешь массив и пытаешься его добавить, а этот метод добавляет по одному элементу за раз.

Автор: gambit 3.11.2008, 22:56
Цитата(Bogdan1024 @  3.11.2008,  20:00 Найти цитируемый пост)
Ды десериализуешь массив и пытаешься его добавить, а этот метод добавляет по одному элементу за раз. 

Подскажи пож. как сделать.

Автор: Bogdan1024 3.11.2008, 23:21
Меняешь
Код

listbox.Items.Add(((string)formatter.Deserialize(reader)));

на
Код

            string[] strings = (string[])formatter.Deserialize(reader);
            this.listBox1.Items.Clear();//удаляем из листбокса то шо там было
            for (int i = 0 ; i < strings.Length; i++)
                this.listBox1.Items.Add(strings[i]);



Добавлено через 48 секунд
Вот те код для справки. В ататче.

Автор: gambit 4.11.2008, 13:16
Bogdan1024, спасибо, чет меня вчера клинило, думал мозг взорвется. За старания держи плюс.

Автор: jonie 4.11.2008, 13:26
AddRange там есть. Не надо циклов

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)