Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как скопировать объект / 9 сообщений из 9, страница 1 из 1
11.12.2009, 15:51
    #36361706
Tigera
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
Здравствуйте! Вопрос по иcпользованию VBA. У меня создан свой объект. Мне необходимо после того, как я его создам размножить его несколько раз. Т.е. по сути скопировать существующий объект в новый. Подскажите как это можно сделать? Насколько я понимаю простое приравнивание оперирует ссылками на объект, а не самим объектом.
...
Рейтинг: 0 / 0
11.12.2009, 16:02
    #36361747
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
TigeraЗдравствуйте! Вопрос по иcпользованию VBA. У меня создан свой объект. Мне необходимо после того, как я его создам размножить его несколько раз. Т.е. по сути скопировать существующий объект в новый. Подскажите как это можно сделать? Насколько я понимаю простое приравнивание оперирует ссылками на объект, а не самим объектом.

Что вы подразумеваете под "своим объектом"? Экземпляр класса?

Сравниваются ссылки...
...
Рейтинг: 0 / 0
11.12.2009, 16:07
    #36361756
Tigera
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
Наверно не совсем корректно выразилась. Да есть некоторый класс. Я создаю экземпляр этого класса и этот экземпляр мне надо сдублировать несколько раз, не пребегая к его повторному созданию с повторным указанием всех значений свойств.
...
Рейтинг: 0 / 0
11.12.2009, 16:14
    #36361781
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
propertypage заюзайте , а называется это сериализация, то что вы хотите
...
Рейтинг: 0 / 0
11.12.2009, 16:32
    #36361834
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
> Автор: Tigera
> Наверно не совсем корректно выразилась. Да есть некоторый класс. Я создаю экземпляр этого класса и этот экземпляр
> мне надо сдублировать несколько раз, не пребегая к его повторному созданию с повторным указанием всех значений
> свойств.

Написать функцию, которая будет это делать создание объекта и установку таких-же свойств. например у меня есть
дополнительный метод в классе-коллекции который добавляет копию объекта в коллекцию:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function AddObj(obj As clsAddData) As clsAddData

    Dim objNewMember As clsAddData
    Set objNewMember = New clsAddData

    objNewMember.FillAddData obj
    mCol.Add objNewMember, objNewMember.Key

    'return the object created
    Set AddObj = objNewMember
    Set objNewMember = Nothing
End Function
Здесь используется метод FillAddData класса clsAddData:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
'***************************************************************************
'*  Name         : FillAddData
'*  Description  : Заполняет данными из другого объекта
'*  Parameters   : objVData - clsAddData
'*  Returns      : Nothing
'*  Date         : 20 мар 2005
'***************************************************************************

Public Sub FillAddData(ByVal vData As clsAddData)

Dim i As Long

On Error GoTo errHandler
For i = fdName To fdDoDiscount
    Me.DataElement(i) = vData.DataElement(i)
Next i
With Me
    .mdQuantity = vData.mdQuantity
    .TypeElement = vData.TypeElement
End With
Exit Sub

errHandler:

ErrStr = vbCrLf & "clsAddData метод - FillAddData" & vbCrLf
Debug.Print ErrStr
g_DebugOutput.AddLogEvent ErrStr
Resume Next
End Sub

Public Property Let DataElement(FieldEl As FieldData, ByVal vData As String)
Select Case FieldEl
Case fdName
    mvarsNameElement = vData
Case fdArtName
    mvarsArtElement = vData
Case fdType
    mvarsTypeElement = vData
Case fdDefValue
    mvarsDefaultValue = CBool(vData)
Case fdUnit
    mvarsUnitElement = vData
Case fdKoshtUnit
    vData = Replace(vData, ",", ".")
    mvardKoshtUnit = Val(vData)
Case fdDoDiscount
    mvarbDoDiscount = IIf(LCase$(vData) = "true", True, False)
End Select
End Property

Public Property Get DataElement(FieldEl As FieldData) As String
Select Case FieldEl
Case fdName
    DataElement = mvarsNameElement
Case fdArtName
    DataElement = mvarsArtElement
Case fdType
    DataElement = mvarsTypeElement
Case fdDefValue
    DataElement = mvarsDefaultValue
Case fdUnit
    DataElement = mvarsUnitElement
Case fdKoshtUnit
    DataElement = CStr(mvardKoshtUnit)
Case fdDoDiscount
    DataElement = CStr(mvarbDoDiscount)
End Select
End Property
Свойство DataElement в параметре принимает значение энума, по нему выдает/принимает сами данные,

Как-то так, если есть ещё варианты буду рад услышать :)

З.Ы. Подозреваю о возможности делать CopyMemory, но не пробовал, устраивало то что есть, к тому-же уже давно не
актуально

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11.12.2009, 16:46
    #36361870
Tigera
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
Игорь Горбонос,
Спасибо за совет. Попробую сделать так, но надеялась что все же VBA сам умеет делать нечто подобное. Не хочется изобретать велосипед.
...
Рейтинг: 0 / 0
11.12.2009, 16:56
    #36361897
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
вы о каком объекте речь ведёте , поясните пожалуйста и пример вашего кода.
а то насоветовать можно всякое
...
Рейтинг: 0 / 0
11.12.2009, 20:24
    #36362305
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
Если я правильно понял, нужно что-то подобное конструктору копирования в C++. Простое использование CopyMemory есть путь в никуда, достаточно вспомнить о членах сложных типов - вариантного, объектных, строковых, массивах... В COM-объекты вводят при необходимости создания копий специальные методы, вроде IEnumXXXX::Clone() или DAO.Recordset.Clone.
...
Рейтинг: 0 / 0
11.12.2009, 20:31
    #36362313
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как скопировать объект
Konst_One,

PropertyBag, не Page. Кстати, да.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / как скопировать объект / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]