одно из свойств этого класса является классом classAC
в классе classAC есть объект DocAC объявленный с WithEvents
class1 имеет событие SelectAC
оно генерируется в процедуре subRaiseEvenSelectAC которая вызывается из класса classAC в тот момент когда срабатывает событие DocAC_SelectionChanget
Программа:
- Код: Выделить всё
Option Explicit
Dim WithEvents myClass As Class1
Private Sub Form_Load()
Set myClass = New Class1
myClass.clAC.ConnectAC
End Sub
Private Sub myClass_SelectAC(ByVal mValue As Variant)
Me.Caption = UBound(mValue)
End Sub
Class1:
- Код: Выделить всё
Option Explicit
Public Event SelectAC(ByVal mValue As Variant)
Public Property Get clAC() As ClassAC
Set clAC = New ClassAC
Set clAC.cClass = Me
End Property
Friend Sub subRaiseEventSelectAC(ByVal mValue As Variant)
RaiseEvent SelectAC(mValue)
End Sub
ClassAC:
- Код: Выделить всё
Option Explicit
Public cClass As Class1
Private WithEvents AppCad As AutoCAD.AcadApplication
Private WithEvents DocAC As AutoCAD.AcadDocument
Private Sub DocAC_SelectionChanged()
Dim mV() As Double
Dim i As Integer
ReDim mV(DocAC.PickfirstSelectionSet.Count)
For i = 1 To DocAC.PickfirstSelectionSet.Count
mV(i) = DocAC.PickfirstSelectionSet.Item(i - 1).ObjectID
Next i
Call cClass.subRaiseEventSelectAC(mV)
End Sub
Public Sub ConnectAC()
Set AppCad = GetObject(, "AutoCAD.Application")
Set DocAC = AppCad.ActiveDocument
End Sub
по задумке программа должна получать событие в тот момент когда в автокаде изменилось выделение. почему это не работает примерно понятно, каждый раз когда обращаюсь к свойству Class1.clAC создается новый экземпляр класса класса classAC видимо по этому и не работает.
чтобы работало, нужно в программе сделать так:
- Код: Выделить всё
Option Explicit
Dim WithEvents myClassAC As ClassAC
Private Sub Form_Load()
Set myClassAC = New ClassAC
myClassAC.ConnectAC
End Sub
Private Sub myClassAC_SelectAC(ByVal mValue As Variant)
Me.Caption = UBound(mValue)
End Sub
в классе объявить событие SelectAC и генерировать его как только получим событие от автокада.
- Код: Выделить всё
Option Explicit
Private WithEvents AppCad As AutoCAD.AcadApplication
Private WithEvents DocAC As AutoCAD.AcadDocument
Public Event SelectAC(ByVal mValue As Variant)
Private Sub DocAC_SelectionChanged()
Dim mV() As Double
Dim i As Integer
ReDim mV(DocAC.PickfirstSelectionSet.Count)
For i = 1 To DocAC.PickfirstSelectionSet.Count
mV(i) = DocAC.PickfirstSelectionSet.Item(i - 1).ObjectID
Next i
RaiseEvent SelectAC(mV)
End Sub
Public Sub ConnectAC()
Set AppCad = GetObject(, "AutoCAD.Application")
Set DocAC = AppCad.ActiveDocument
End Sub
так все работает, но мне так не нравится
хочу в программе объявлять только один объект Class1 и чтобы все работало )
можно ли сделать это как-то первым способом?