Отслеживание изменений свойств класса из контрола

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Отслеживание изменений свойств класса из контрола

Сообщение The trick » 12.10.2011 (Ср) 22:29

Здравствуйте у меня возникла проблема. Я пишу контрол, у него есть свойство List, которое является объектом класса clsList
Код: Выделить всё
Public Property Get List() As clsList
     Set List = mList
End Property

Вот собственно вопрос при обращении к этому свойству я получаю ссылку на объект mList, но отследить изменения в классе из контрола я никак немогу (допустим чтобы его перерисовать). Пробывал объявлять mList через WithEvents, но возникает ошибка циклической ссылки т.к. объект mList содержит объектное свойство Item, которое всвою очередь содержит свойство List аналогичное контролу.. Может как то можно по другому?
Код класса clsList
Код: Выделить всё
Dim WithEvents mvarList As Item 'local copy
Private mvarCaption As Long 'local copy
Public Event Change()

Public Property Set List(vData As Item)
'used when assigning an Object to the property, on the left side of a Set statement.
'Syntax: Set x.List = Form1
     Set mvarList = vData
End Property


Public Property Get List() As Item
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.List
     Set List = mvarList
End Property



Public Property Let Caption(ByVal vData As Long)
'used when assigning a value to the property, on the left side of an assignment.
'Syntax: X.Caption = 5
     mvarCaption = vData
     RaiseEvent Change
End Property


Public Property Get Caption() As Long
'used when retrieving value of a property, on the right side of an assignment.
'Syntax: Debug.Print X.Caption
     Caption = mvarCaption
End Property

Private Sub mvarList_Change()
RaiseEvent Change
End Sub

Код класса Item
Код: Выделить всё
Private mvarIcon As Long 'local copy
Public Event Change()
Dim WithEvents mvarNewList As clsList

Public Property Set NewList(ByVal vData As clsList)
     Set mvarNewList = vData
     RaiseEvent Change
End Property


Public Property Get NewList() As clsList
     Set NewList = mvarNewList
End Property



Public Property Let Icon(ByVal vData As Long)
     mvarIcon = vData
     RaiseEvent Change
End Property


Public Property Get Icon() As Long
     Icon = mvarIcon
End Property

Private Sub mvarNewList_Change()
     RaiseEvent Change
End Sub

Выскакивает ошибка Circular dependecies between module
UA6527P

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Отслеживание изменений свойств класса из контрола

Сообщение Хакер » 13.10.2011 (Чт) 4:54

Ну так воистину циклическая зависимость.
Меняй логику. Зачем пункту знать об изменениях в списке с помощью события?

У тебя в списке происходит событие Change, уведомление о нём получает пункт, и сам возбуждает событие Change, уведомление о нём получает список и сам возбуждает событие Change, а уведомление о нём получает пункт (каждый!) и сам возбуждает событие Change, и все уведомления от всех пунктов получает список, воздбуждает кучу событий Change, и куча пунктов получает кучу событий, и возбуждает n×n событий Change. Продолжать?

VB вполне закономерно ругается.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

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

Re: Отслеживание изменений свойств класса из контрола

Сообщение alibek » 13.10.2011 (Чт) 8:02

Для таких случаев у UC есть свойство EventsFrozen.
Но лучше меняй логику.
Lasciate ogni speranza, voi ch'entrate.

The trick
Постоялец
Постоялец
 
Сообщения: 781
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Отслеживание изменений свойств класса из контрола

Сообщение The trick » 13.10.2011 (Чт) 11:14

Зачем пункту знать об изменениях в списке с помощью события?

Для того чтобы перерисовать контрол.

В приведенном ниже коде я немного упростил пример а так у меня вот такая структура
    List
      Item (Коллекция)
        List
      Caption
      Icon
Т.е. каждый item может содержать вложенный список и так до бесконечности.
Для таких случаев у UC есть свойство EventsFrozen

А можно поподробнее пожалуйста
UA6527P


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

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

Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 26

    TopList