powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Все открытые классы
22 сообщений из 22, страница 1 из 1
Все открытые классы
    #34162770
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, вот перебрать все открытые формы - это:

Код: plaintext
1.
2.
3.
For each frm in Forms
...
Next

А как перебрать все открытые классы?
...
Рейтинг: 0 / 0
Все открытые классы
    #34162991
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. все типы в приложении ?
...
Рейтинг: 0 / 0
Все открытые классы
    #34163060
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное имеется ввиду "классы, чьи экземпляры еще не все уничтожены". Нет.
...
Рейтинг: 0 / 0
Все открытые классы
    #34163080
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле никак.
Или ты должен написать процедуру, которая просматривает значение всех объектных переменных и коллекций уровня модуля.
...
Рейтинг: 0 / 0
Все открытые классы
    #34163086
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyи коллекцийВ смысле элементов коллекций.
...
Рейтинг: 0 / 0
Все открытые классы
    #34163282
Фотография michael R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может быть через Add-in (надстройки)
но не уверен что там есть все коллекции
...
Рейтинг: 0 / 0
Все открытые классы
    #34163819
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно использую такую схему
...
Рейтинг: 0 / 0
Все открытые классы
    #34164043
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NikzЯ обычно использую такую схему
Спасибо. Что-то подобное мне и приходиться делать.

AntonariyИли ты должен написать процедуру, которая просматривает значение всех объектных переменных и коллекций уровня модуля.
А это как?
...
Рейтинг: 0 / 0
Все открытые классы
    #34164460
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а зачем это надо - получить список всех созданных объектов?
...
Рейтинг: 0 / 0
Все открытые классы
    #34164491
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо, чтоб потом их поубивать.
...
Рейтинг: 0 / 0
Все открытые классы
    #34164493
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffИнтересно, а зачем это надо - получить список всех созданных объектов? Ну можно предположить, что так хотят бороться с memory leaks
...
Рейтинг: 0 / 0
Все открытые классы
    #34165691
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesВидимо, чтоб потом их поубивать.
Это во-первых.

А во-вторых - по некоторому событию необходимо обновить информацию во всех открытых экземплярах классов.


Кста, нашел тут GUI Resource Tracer - вобщем-то не совсем по теме, но может кому пригодится
...
Рейтинг: 0 / 0
Все открытые классы
    #34166247
Alexey Kudinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RustygoldА во-вторых - по некоторому событию необходимо обновить информацию во всех открытых экземплярах классов. ну и пусть они подпишутся на это событие. Уж это то можно сделать совершенно штатными средствами.
...
Рейтинг: 0 / 0
Все открытые классы
    #34166311
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напрямую убивать объекты бессмыслица. См. "буквари".
Надо погасить все ссылки на корневой объект в иерархии, и все убъется само.
Но при условии что Нет циклической ссылки.
Вот поэтому, кстати, надо подписываться на события (чтобы среагировать на изменение каких-то глобальных настроек).

Иногда новички ведут параллельно иерархию объектов и вложенность форм. То же мешает "чистке объектов". Из-за обилия дублирующегося кода.
...
Рейтинг: 0 / 0
Все открытые классы
    #34166385
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff...
Но при условии что Нет циклической ссылки.
Вот поэтому, кстати, надо подписываться на события (чтобы среагировать на изменение каких-то глобальных настроек).
...Поясните пожалуйста как "подписываение на событие" поможет решить проблему циклической ссылки?
...
Рейтинг: 0 / 0
Все открытые классы
    #34166450
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае, Rustygold хочет передать объектам находящимся в разных местах како-то параметр (ну допустим код языка).
Чтобы передать всем объектам этот код нужно либо 1) держать коллекцию со ссылками на эти объекты. либо 2) каждый объект подписывать на событие.
В первом случае объекты НЕ выгрузятся из памяти до тех пор пока эта коллекция не будет очищена. Как сделать "очистку" в данном случае - ну кому хочется - пусть повозятся.
А события не держат ссылки.

События позволяют избежать циклической ссылки и в случае когда объект помещаемый в контейнерный класс должен иметь ссылку на экземпляр своего контейнера.
...
Рейтинг: 0 / 0
Все открытые классы
    #34166486
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff

А объясните, пожалуйста, "букварьную истину" - как подписать объект на событие? и как это событие сынициировать, чтоб его все кому надо подхватили?
...
Рейтинг: 0 / 0
Все открытые классы
    #34166511
Фотография Старый ворчун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WorobjoffВ данном случае, Rustygold хочет передать объектам находящимся в разных местах како-то параметр (ну допустим код языка).
Чтобы передать всем объектам этот код нужно либо 1) держать коллекцию со ссылками на эти объекты. либо 2) каждый объект подписывать на событие.
В первом случае объекты НЕ выгрузятся из памяти до тех пор пока эта коллекция не будет очищена. Как сделать "очистку" в данном случае - ну кому хочется - пусть повозятся.
А события не держат ссылки.

События позволяют избежать циклической ссылки и в случае когда объект помещаемый в контейнерный класс должен иметь ссылку на экземпляр своего контейнера.
Про циклические ссылки я знаю и как с ними бороться тоже, но ваша мысль осталась "вещью в себе".
...
Рейтинг: 0 / 0
Все открытые классы
    #34166534
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
class clsCodeWatcher:
Код: plaintext
1.
2.
3.
4.
Public Event Changed(NewCode as long)
Public sub SendNewCode(NewCode as long)
   RaiseEvent Changed(NewCode)
End sub
Module1:
Код: plaintext
1.
2.
3.
4.
public CodeWatcher as clsCodeWatcher
Public sub Main
   Set CodeWatcher = new clsCodeWatcher
End sub
Грубый и не очень рекомендуемый пример реализации подписания
class clsSomeOne
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
private withevents m_CodeWatcher
sub Class_Initialize
  Set m_CodeWatcher = Module1.CodeWatcher
end sub

sub m_CodeWatcher_Changed(NewCode as long)
   m_Code = NewCode
end sub
'Вот и все. Каждый объект при создании сам подпишется на событие
Стоит вызвать функцию Module1.CodeWatcher.SendNewCode xxx
- все объекты получат это новое значение xxx
...
Рейтинг: 0 / 0
Все открытые классы
    #34166603
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый ворчунПро циклические ссылки я знаю и как с ними бороться тоже, но ваша мысль осталась "вещью в себе".
class MyCollection
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
dim withevents m_Notifier as clsNotifier
sub Class_Initialize
   set m_Notifier = new clsNotifier
end sub
Public sub Add()
   Dim obj as clsMyItem
   Set obj = new clsMyItem
   obj.Initialize m_Notifier
   mCol.Add obj, ...
end sub

private sub m_Notifier_Message(sender as Object, v as Variant)
   if v = "GetParent then
      set sender = me;
   end if
end sub
class clsNotivier
Код: plaintext
1.
2.
3.
public event Message(sender As Object, v As Variant)
public sub SendEvent(sender As Object, v As Variant)
   raiseevent Message(sender As Object, v As Variant)
end sub
class clsMyItem
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dim m_ParentNotifier as clsNotifier
public sub Initialize(byval Notifier as clsNotifier)
   set m_ParentNotifier = Notifier
end sub
public property get Parent as clsMyCollection
   dim Obj as clsMyCollection
   m_ParentNotifier.Message obj, "GetParent"
   set Parent = obj
end property
...
Рейтинг: 0 / 0
Все открытые классы
    #34166615
Фотография Worobjoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это был грубый пример развязки коллекции и ее итемов. С недостатками конечно.
Если интересно, вечером выложу пример погибче.
...
Рейтинг: 0 / 0
Все открытые классы
    #34167290
Rustygold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Worobjoff
Спасибо за примеры - буду, с вашего позволения, использовать :)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Все открытые классы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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