|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
23.01.2009, 21:58 | #1 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
Выгрузка(удаление) экземляра класса
Как грамотно удалять экземпляры класса?
Создал класс, экземпляры которого: - при создании, попутно создают в родительском Frame'е (В форме, для наглядности) свой фрейм, а также label и CommandButton. - по команде создают N-ное количество себе подобных и хранят в себе ссылки на эти подобные классы, становясь их "родителями" в котрых снова рисуются новые экземпляры. т.е. - куча ссылок друг на друга. Необходимо это для воспроизведения дерева решений, и выбора наиболее подходящего решения. я изменяю все ссылки на экземпляры путем присвоения Nothing, так вроде написано в Help'е, однако не помогает, их "духи" все равно существуют, так как откликаются на тестовое событие. Есть ли процедура полной выгрузки экземпляра? Для наглядности посмотрите вложение, поймете о чем реч. Решение логистической задачи, для универа... Двойным щелчком нажимайте на прямоугольное окошко и оно будет ветвиться на два таких же но с другим содержанием. Последний раз редактировалось tolikman; 23.01.2009 в 22:13. Причина: добавил вложение |
23.01.2009, 22:24 | #2 |
Балуюсь кодами
Участник клуба
Регистрация: 09.01.2009
Сообщений: 1,837
|
Толик, тебе было бы проще в чистом VB работать с этим безобразием.
Лучше день потерять — потом за пять минут долететь!©
|
23.01.2009, 23:04 | #3 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
Знаю проще, но поздно, не думал что так глубоко зайдет. Была бы возможность - сделал в VB, мешает уже начатое.
Кстати можно unload форму, и все созданное в ней исчезнет. Но надеюсь на более лучший вариант. |
24.01.2009, 08:43 | #4 | ||||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Цитата:
Хотя, может, кто-нибудь знает способ (или спец. прогу) для конвертации VBA-формы в VB-форму? (имеется ввиду обработка файла .frm, чтобы этот файл начал понимать VB) За день, в принципе, вполне реально портировать код из VBA в VB. Но я не стал бы этого делать - редактировать код VBA можно на любом компьютере, где установлен Office (не надо устанавливать VB), да и запустить можно любую форму или процедуру (в отличие от предопределённой формы или Sub Main в VB) - именно поэтому я не вижу смыcла переносить код в VB... VBA в плане разработки намного удобнее. Цитата:
Несколько удивила строка Private childs() As New Matrix среди свойств класса Matrix То есть, при создании одного экземпляра класса Matrix автоматически создаётся ещё один дочерний экземпляр, и так далее до бесконечности? Я бы описал класс Matrix примерно так: Код:
Причём, при создании нового экземпляра дочерние объекты создаются не автоматически, а лишь тогда, когда НадоСоздатьДочерниеЭкземпляры = TRUE При уничтожении родительского объекта уничтожаются все его дочерние объекты. Хотя, в принципе, процедура Class_Terminate не нужна - дочерние объекты уничтожатся сами при уничтожении родительского объекта. Цитата:
Код:
Я бы использовал для childs коллекции вместо массивов - элементами коллекции были бы экземпляры класса Matrix. И никаких ReDim-ов... По поводу того, что Цитата:
Тогда будет намного проще разобраться в причинах происходящего...
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 24.01.2009 в 09:58. |
||||
24.01.2009, 17:13 | #5 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
EducatedFool, с Collections я незнакомился, самоучка... Спасибо, поэксперементирую) действительно будет удобнне...
1. в моем случае, я нашел более простой вариант, состояние формы важно для программы после открытия и закрытия, а на время открытия (userform_activate) форму в любом случае надо обнулять, я просто сначала выгружаю форму, а потом инициализирую Код:
set label = Parent.Controls.Add("Forms.Label.1" ), новый созданный контрол не имеет никаких ссылок на клас, который спровоцировал его создание, а только на класс Parent, т.е. на userform, framе и т.д., который непосредственно его создал. ведь ссылка не может быть "двухсторонней"? т.е. label однозначно ссылается на созданный контрол, кторый в свою очередь не имеет никаких ссылок на наш класс. следовательно сами контролы удалять не обязательно. Достаточно удалить экземпляр класса, точнее все ссылки на него (а их всего 3: ссылка у родителя, ссылка у ребенка(хотя ребенок удаляется раньше), ссылка у объекта Shpion, который её удаляет самым первым во всей этой очереди). PS - я конечно буду удалять контролы, т.к. они не нужны, но понять особенности всего этого необходимо. |
24.01.2009, 17:26 | #6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,856
|
Я бы сделал так:
В классе предусмотрел бы отдельную коллекцию для создаваемых элементов управления: Код:
Далее, каждый раз при создании нового контрола, я добавлял бы его в коллекцию соответствующего элемента класса: Код:
Потом, при уничтожении экземпляра класса Matrix, срабатывал бы следующий код: Код:
Цитата:
Советую как можно скорее изучить Collection - очень полезная штука... А при работе с классами просто незаменимая.
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
Макросы любой сложности на заказ. Мониторинг цен конкурентов Последний раз редактировалось EducatedFool; 24.01.2009 в 17:29. |
|
25.01.2009, 03:30 | #7 |
Форумчанин
Регистрация: 25.08.2008
Сообщений: 159
|
EducatedFull огромное спасибо за советы и полезную информацию!!! учту и воспользуюсь...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выгрузка картинок в проект | Rusl92 | Общие вопросы Delphi | 2 | 20.08.2008 23:00 |
Выгрузка более 65000 строк | Xozer | Microsoft Office Excel | 4 | 01.02.2008 22:09 |
Выгрузка в файл с динамическим названием. | Квэнди | БД в Delphi | 0 | 24.06.2007 15:39 |
выгрузка в файл | zetrix | БД в Delphi | 0 | 30.10.2006 12:50 |