Коллекции

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Коллекции

Сообщение Sirik » 28.01.2005 (Пт) 14:46

Есть коллекция col1

как col1 скопировать в col1.

Если я делаю так:
set col2= new collection
set col2=col1

то если я делаю какие-либо изменения в col2, то эти изменения переносятся в col1. получается, что col2 является просто ссылкой на col1. а мне надо сделать копию
как?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 14:49

Ну дык поэлементным копированием...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 14:52

2 GSerg

Да, так я знаю. А что простой, типа Copy, нет?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 14:53

Типа нет.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 14:57

Спасибо

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.01.2005 (Пт) 15:05

В таких случаях хорошим тоном является нечто подобное:
Set col2 = col1.Clone()

Разумеется, внутри .Clone выполняется то самое поэлементное копирование, но снаружи выглядит симпатично.
Lasciate ogni speranza, voi ch'entrate.

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 16:07

Я что-то недопонимаю.

У меня есть такая свойство формы:
Код: Выделить всё
Public Property Let Put_App(ByVal vNewValue As Collection)
    Dim I As Long
   
    Per_Form.Saved_App = False
   
    Set col_App = Nothing
    Set col_App_ORI = Nothing
   
    Set col_App = vNewValue
   
    Set col_App_ORI = New Collection
   
    For I = 1 To col_App.Count
        col_App_ORI.Add col_App(I)
    Next
   
End Property


Тут я передаю коллекцию. Ссылка на неё копируется в col_App. А в col_App_ORI копируется всё содержимое передаваемой коллекции.

Когда я делаю какие-либо изменения в col_App, они передаются и в col_App_ORI. Почему?

_Hiser_
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 12
Зарегистрирован: 28.01.2005 (Пт) 11:34
Откуда: Барнаул

Сообщение _Hiser_ » 28.01.2005 (Пт) 16:13

А ещё можно использовать CopyMemory.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.01.2005 (Пт) 16:14

Да потому.
Не
Set col_App = vNewValue
а
Set col_App = New ...
col_App.Name= vNewValue.Name
Lasciate ogni speranza, voi ch'entrate.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.01.2005 (Пт) 16:14

_Hiser_ писал(а):А ещё можно использовать CopyMemory.

Для коллекций? Are you sure?
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 16:17

Как именно передаются изменения?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 16:19

2 alibek
Мне надо чтобы col_App_ORI оставалась ориганальной, т.е. все изменения, которые происходят в других коллекциях, её не касались

2 GSerg

Все мои коллекции состоят из Итемов такой конструкции:
X
Y
Z
A
O
T

Когда я меняю значения, например, col_App(1).X=10
то если посмотреть в col_App_ORI(1).X, там тоже 10

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.01.2005 (Пт) 16:53

alibek писал(а):В таких случаях хорошим тоном является нечто подобное:
Set col2 = col1.Clone()

Разумеется, внутри .Clone выполняется то самое поэлементное копирование, но снаружи выглядит симпатично.


Угу. Самый правильный способ.
Реализуем ICloneable интерфейс ;)

Кстати, ничего сложного-то нет...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 16:59

Объекты, что ль?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 17:05

Народ, ну серьёзно!
Очень срочно надо!

И как Clone сделать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 17:06

Да никак, это про .NET
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 17:11

А что тогда делать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 17:12

Повторю вопрос - ты объекты в коллекцию добавляешь?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 17:16

Нет, классы

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 17:18

!@#$%^

А они не объекты, по-твоему? :)
Учить матчасть! И копировать ещё и объекты. Ты на данный момент копируешь только указатели.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 17:20

Я понимаю, что копирую только указатели
Как скопировать имеено содержимое?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 28.01.2005 (Пт) 17:24

Точно тем же способом, каким ты скопировал коллекцию. Для каждого объекта =new, с последующим присвоением каждой проперти...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.01.2005 (Пт) 17:31

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

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 28.01.2005 (Пт) 17:33

Я сделал как сказал GSerg - всё работает.
Как я сам это не понял?


Вернуться в Visual Basic 1–6

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

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

    TopList