mycad 发表于 2009-10-11 10:55:00

[求助] WithEvents 事件

<p>我在autocad vba 模块中编写如下代码</p><p>Public WithEvents PLine As AcadLWPolyline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Use with Modified Event Example<br/>Sub Example_Modified()<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' This example creates a light weight polyline in model space and<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' references the new PolyLine using the public variable (PLine) which<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' is setup to intercept Modified events.<br/>&nbsp;&nbsp;&nbsp;&nbsp; '<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' This example then modifies the new object, triggering the code<br/>&nbsp;&nbsp;&nbsp;&nbsp; ' in the Modified event.<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; Dim points(0 To 9) As Double<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' Define the 2D polyline points<br/>&nbsp;&nbsp;&nbsp; points(0) = 1: points(1) = 1<br/>&nbsp;&nbsp;&nbsp; points(2) = 1: points(3) = 2<br/>&nbsp;&nbsp;&nbsp; points(4) = 2: points(5) = 2<br/>&nbsp;&nbsp;&nbsp; points(6) = 3: points(7) = 2<br/>&nbsp;&nbsp;&nbsp; points(8) = 4: points(9) = 4<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' Create a light weight Polyline object in model space<br/>&nbsp;&nbsp;&nbsp; '<br/>&nbsp;&nbsp;&nbsp; ' * Note: We are returning the new PolyLine object into a Module<br/>&nbsp;&nbsp;&nbsp; ' level variable.&nbsp; This allows us to intercept events associated<br/>&nbsp;&nbsp;&nbsp; ' with that particular object.<br/>&nbsp;&nbsp;&nbsp; Set PLine = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ThisDrawing.Application.ZoomAll<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; ' Modify object to trigger event.<br/>&nbsp;&nbsp;&nbsp; '<br/>&nbsp;&nbsp;&nbsp; ' * Note: The event code for the PolyLine modification will be triggered<br/>&nbsp;&nbsp;&nbsp; ' before we move forward and refresh the view, so the line will not<br/>&nbsp;&nbsp;&nbsp; ' appear red when the event message box is displayed<br/>&nbsp;&nbsp;&nbsp; PLine.Color = acRed</p><p>&nbsp;&nbsp;&nbsp; ThisDrawing.Regen acAllViewports<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p>Private Sub PLine_Modified(ByVal pObject As AutoCAD.IAcadObject)<br/>&nbsp;&nbsp;&nbsp; ' This example intercepts an object's Modified event.<br/>&nbsp;&nbsp;&nbsp; '<br/>&nbsp;&nbsp;&nbsp; ' This event is triggered when an object supporting this event is modified<br/>&nbsp;&nbsp;&nbsp; '<br/>&nbsp;&nbsp;&nbsp; ' To trigger this code: Modifiy an object connected to this event<br/>&nbsp;&nbsp;&nbsp; ' * Note: By connected, we mean the object setup to intercept events using<br/>&nbsp;&nbsp;&nbsp; ' the VBA WithEvents statement</p><p>&nbsp;&nbsp;&nbsp; ' Use the "pObject" variable to determine which object was modified<br/>&nbsp;&nbsp;&nbsp; MsgBox "You just modified an object with an ID of: " &amp; pObject.ObjectID<br/>&nbsp;&nbsp;&nbsp; <br/>End Sub</p><p><br/>调试时提示 错误,怎末回事呀?</p><p>谢谢赐教!</p>

mycad 发表于 2009-10-12 07:44:00

<p>本人已经解决了:</p><p>1、在类中增加一个“eventclassmoduel”类,</p><p>2、把Public WithEvents PLine As AcadLWPolyline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ' Use with Modified Event Example</p><p>放入“eventclassmoduel”中</p><p>3、在标准模块中定义引用即可:dim x as eventclassmoduel</p><p>4、sub xxx()</p><p>................</p><p>’根据需要添加代码</p><p>end sub</p><p><br/></p>

lkxdl 发表于 2009-10-12 23:18:00

把整个代码放在thisdarwing里不就可以了,不用搞那么麻烦!
页: [1]
查看完整版本: [求助] WithEvents 事件