ListView сохранить копонент.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

ListView сохранить копонент.

Сообщение Artin39 » 16.01.2009 (Пт) 1:38

HI
Подскажите как сохранить компонент ListView?
Чтобы после запуска программы и загрузки компонента он восстанваливался полностью.
ЗЫ
Если не трудно приведите пример, пишу первую программу до этого писал на дельфи.
Пишу на Microsoft Visual Basic 2008, экспресс-выпуск.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: ListView сохранить копонент.

Сообщение Viper » 16.01.2009 (Пт) 7:52

Сколько угодно средств: ini-файл, реестр, XML и т.д., и т. п.. И, что характерно, все это есть на форуме, остается воспользовавшись поиском все это найти.
Весь мир матрица, а мы в нем потоки байтов!

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

Re: ListView сохранить копонент.

Сообщение Artin39 » 16.01.2009 (Пт) 10:58

Viper писал(а):Сколько угодно средств: ini-файл, реестр, XML и т.д., и т. п.. И, что характерно, все это есть на форуме, остается воспользовавшись поиском все это найти.

Подскажите как засунуть в ini фаил целый компонент? Выгружать Items как текст и загружать его обратно не вариант :)
Или может лучше использовать XML?

PS
Обращаю ваше внимание что необходиом сохранить компонент целиком, тоесть со всеми свойствами.
В делфи это делаеться достаточно простр
Код: Выделить всё
F := TFileStream.Create('Path file', fmOpenRead or fmShareDenyWrite);
F.ReadComponent(компонент);

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: ListView сохранить копонент.

Сообщение Viper » 16.01.2009 (Пт) 11:41

"Сохранить компонент целиком" - ересь! Либо тебе все же надо сохранит состояние компонента, либо ты что-то не так формулируешь.
Весь мир матрица, а мы в нем потоки байтов!

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

Re: ListView сохранить копонент.

Сообщение Artin39 » 16.01.2009 (Пт) 18:03

Если вы это называете
сохранит состояние компонента
пусть будет так!

Попробую описать более подробно :)
На форме есть компонент ListView, у него множество свойств такие как элементы(items), цвет(Любых элементов компонента), группы, колони,размер колонок , выбранные элементы, вид и тд (надеюсь понятно о чём я говорю :twisted: ). Я хочу сохранить в фаил все эти свойства, те как вы сказали "сотояние компонета" (R). Хочеться чтобы после повторного запуска моего ПО, ListView выглядел точно также как до закрытия.
ЗЫ
Я написал что делал это сам, только на другом языке ,привёл пример кода, а вы ересь!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ListView сохранить копонент.

Сообщение Хакер » 16.01.2009 (Пт) 18:12

Не стоит путать дельфийские компоненты с COM-компонентами VB.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ListView сохранить копонент.

Сообщение iGrok » 16.01.2009 (Пт) 18:24

Artin39 писал(а):Я написал что делал это сам, только на другом языке ,привёл пример кода, а вы ересь!

Ты не "делал это сам на другом языке". Просто этот самый другой язык предоставляет такую возможность как часть стандартного функционала. Этим стандартным функционалом ты и воспользовался. А VB такого стандартного функционала не предоставляет.
Если ты хочешь сделать это на VB - пиши нужные тебе свойства в файл при закрытии, а при открытии читай из файла и устанавливай. Ничего сложного в общем-то..

А ересь - называть это "сохранить компонент целиком". Компонент - он и есть компонент. ListView. И ListView с итемами остаётся всё тем же ListView.
А наличие или отсутствие итемов, их цвет, размер, форма, роста, вес и политическая ориентация - это состояние компонента. Его тебе и надо сохранять.
label:
cli
jmp label

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

Re: ListView сохранить копонент.

Сообщение Artin39 » 16.01.2009 (Пт) 21:17

iGrok писал(а):Если ты хочешь сделать это на VB - пиши нужные тебе свойства в файл при закрытии, а при открытии читай из файла и устанавливай. Ничего сложного в общем-то..

Можешь пример написать? Буду признателен :D

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ListView сохранить копонент.

Сообщение iGrok » 16.01.2009 (Пт) 21:45

Artin39 писал(а):Можешь пример написать? Буду признателен :D

Ну какой пример-то? Я же не знаю, что именно тебе нужно сохранить! )

Перебираешь нужные свойства.. Перебираешь коллекцию ListItems. Если у ListItems есть сабитемы - перебираешь их для каждого итема.
Всё, что нужно - сохраняешь в файл. Формат хранения - какой хочешь(можно читать как "это тожно нужно делать самому" =). Хоть xml, хоть ini, хоть что-то своё..

Код: Выделить всё
For i = 1 to ListView.ListItems.Count
    ListView.ListItems(i) '- это итем. тут перебираешь его свойства и сохраняешь всё в файл.

    For j = 1 to ListView.ListItems(i).ListSubItems.Count
        ListView.ListItems(i).ListSubItems(j) ' - это сабитем. всё аналогично.
    Next j
Next i


Обратно тем же порядком.
label:
cli
jmp label

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

Re: ListView сохранить копонент.

Сообщение Artin39 » 16.01.2009 (Пт) 23:19

iGrok писал(а):
Artin39 писал(а):Можешь пример написать? Буду признателен :D

Ну какой пример-то? Я же не знаю, что именно тебе нужно сохранить! )

Перебираешь нужные свойства.. Перебираешь коллекцию ListItems. Если у ListItems есть сабитемы - перебираешь их для каждого итема.
Всё, что нужно - сохраняешь в файл. Формат хранения - какой хочешь(можно читать как "это тожно нужно делать самому" =). Хоть xml, хоть ini, хоть что-то своё..

Код: Выделить всё
For i = 1 to ListView.ListItems.Count
    ListView.ListItems(i) '- это итем. тут перебираешь его свойства и сохраняешь всё в файл.

    For j = 1 to ListView.ListItems(i).ListSubItems.Count
        ListView.ListItems(i).ListSubItems(j) ' - это сабитем. всё аналогично.
    Next j
Next i


Обратно тем же порядком.

Спасибо, жаль что это не совсем то что надо. Такой вариант встречал на msdn.
Но всё равно спасибо за ответ.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: ListView сохранить копонент.

Сообщение iGrok » 17.01.2009 (Сб) 0:49

Artin39 писал(а):Спасибо, жаль что это не совсем то что надо. Такой вариант встречал на msdn.
Но всё равно спасибо за ответ.

Ну а другого варианта нету в принципе..
label:
cli
jmp label

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: ListView сохранить копонент.

Сообщение Nord777 » 18.01.2009 (Вс) 13:53

Artin39 писал(а):Пишу на Microsoft Visual Basic 2008, экспресс-выпуск.
Во-первых надо бы переместить тему, а во-вторых Serialize.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: ListView сохранить копонент.

Сообщение Хакер » 18.01.2009 (Вс) 20:41

Тема перемещена.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Artin39
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 16.01.2009 (Пт) 1:02

Re: ListView сохранить копонент.

Сообщение Artin39 » 23.01.2009 (Пт) 16:44

Nord777 писал(а):
Artin39 писал(а):а во-вторых Serialize.

Почитал про Сериалайз, вродебы то что надо, может кто пример подросит?

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: ListView сохранить копонент.

Сообщение Ramzes » 23.01.2009 (Пт) 18:05

Nord777 писал(а): а во-вторых Serialize.

ListView is not marked as serializable. :roll:

Могу посоветовать отражение :)

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: ListView сохранить копонент.

Сообщение Nord777 » 24.01.2009 (Сб) 0:01

Сериализацией можно управлять, нужно лишь реализовать интерфейс ISerializable.
Вот только насколько это будет оправданным, я не знаю(сам этим не занимался).

Также, сериализовать можно некий обьект ListViewState, который ты заполнишь необходимыми данными о состоянии ListView.
Да, для сериализации, коллекцию(типа ListViewItemCollection) придется перекидывать в другой контейнер(например массив) и здесь только перебор,
но зато для десериализации достаточно будет примерно такой конструкции:
Код: Выделить всё
            State = DirectCast(BF.Deserialize(FS), ListViewState)
            Me.ListView1.Columns.AddRange(State.Columns)
            Me.ListView1.Items.AddRange(State.Items)


Ramzes, а отражение как предлагаешь использовать? Боюсь тут геморойчика поболее будет.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Re: ListView сохранить копонент.

Сообщение Ramzes » 24.01.2009 (Сб) 12:41

Перебор всех не ReadOnly свойств, перебор всех обькутов Column и Items. Гоморойчику конечно будет :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList  
cron