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

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

Сравниваются ссылки...
...
Рейтинг: 0 / 0
как скопировать объект
    #36361756
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно не совсем корректно выразилась. Да есть некоторый класс. Я создаю экземпляр этого класса и этот экземпляр мне надо сдублировать несколько раз, не пребегая к его повторному созданию с повторным указанием всех значений свойств.
...
Рейтинг: 0 / 0
как скопировать объект
    #36361781
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
propertypage заюзайте , а называется это сериализация, то что вы хотите
...
Рейтинг: 0 / 0
как скопировать объект
    #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
как скопировать объект
    #36361870
Tigera
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
Спасибо за совет. Попробую сделать так, но надеялась что все же VBA сам умеет делать нечто подобное. Не хочется изобретать велосипед.
...
Рейтинг: 0 / 0
как скопировать объект
    #36361897
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы о каком объекте речь ведёте , поясните пожалуйста и пример вашего кода.
а то насоветовать можно всякое
...
Рейтинг: 0 / 0
как скопировать объект
    #36362305
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял, нужно что-то подобное конструктору копирования в C++. Простое использование CopyMemory есть путь в никуда, достаточно вспомнить о членах сложных типов - вариантного, объектных, строковых, массивах... В COM-объекты вводят при необходимости создания копий специальные методы, вроде IEnumXXXX::Clone() или DAO.Recordset.Clone.
...
Рейтинг: 0 / 0
как скопировать объект
    #36362313
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

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


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