Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Visual Basic Новый топик    Ответить
 vb 6 события пользовательского класса  [new]
a115
Member

Откуда:
Сообщений: 2
Добрый день

в поректе 3 модуля:
m_Main (code module)
Public Instance1 As Class1

Public Sub Main()
   Dim Instance2 As Class2
   
   Set Instance1 = New Class1
   Set Instance2 = New Class2
   
   Instance1.Text = "kk"
End Sub


Class1 (class module)
Public Event OnChange(ByVal Text As String)

Public Property Let Text(ByVal Value As String)
   RaiseEvent OnChange(Value)
End Property


Class2 (class module)
Private WithEvents Instance1 As Class1

Private Sub Instance1_OnChange(ByVal Text As String)
   Call MsgBox(Text)
End Sub


Cуть попытки: при установке свойства Text класса Class1 вызвать событие OnChange в классе Class2.
Но что-то я делаю не так. В чем ошибка?
28 июл 17, 16:57    [20683487]     Ответить | Цитировать Сообщить модератору
 Re: vb 6 события пользовательского класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20285
a115
Public Instance1 As Class1
a115
Private WithEvents Instance1 As Class1
это две разных независимых переменных. Вторая при этом ничем не инициализировала, то есть Nothing
28 июл 17, 17:19    [20683562]     Ответить | Цитировать Сообщить модератору
 Re: vb 6 события пользовательского класса  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20285
Можно попробовать так:
Public Sub Main()
   Dim Instance2 As Class2
   
   Set Instance2 = New Class2
   Set Instance2.Instance1 = New Class1
   
   Instance2.Instance1.Text = "kk"
End Sub

только переменную Instance1 во втором классе надо сделать публичной
28 июл 17, 17:21    [20683569]     Ответить | Цитировать Сообщить модератору
 Re: vb 6 события пользовательского класса  [new]
a115
Member

Откуда:
Сообщений: 2
О, спасибо огромное!

Изменил код в модуле Class2:
Private WithEvents m_Instance1 As Class1

Private Sub Class_Initialize()
   Set m_Instance1 = Instance1
End Sub

Private Sub m_Instance1_OnChange(ByVal Text As String)
   Call MsgBox(Text)
End Sub

и все заработало. Спасибо
28 июл 17, 17:26    [20683581]     Ответить | Цитировать Сообщить модератору
Все форумы / Visual Basic Ответить