关于循环访问集合对象 (ActiveX)
若要选择 Collection 对象的特定成员,请使用该方法。Item
该方法需要一个标识符,该标识符可以是指定集合中项的位置的索引号,也可以是表示项名称的字符串。Item
该方法是集合的默认方法。如果在引用集合时未指定方法名称,则假定为 Item。以下语句是等效的:Item
- AutoLISP
-
(vla-Item layerCollection "ABC")
- VBA(仅限 AutoCAD)
-
ThisDrawing.Layers.Item("ABC")
ThisDrawing.Layers("ABC")
注意:不要在任何对象上使用实体编辑方法(、、、等),同时使用该机制循环访问集合。在尝试编辑集合中的对象之前完成迭代,或者创建一个临时数组并将其设置为与集合相等。然后,您可以遍历复制的数组并执行编辑。CopyArrayMirrorFor Each
循环访问 Layers 集合
以下示例循环访问集合并显示集合中所有图层的名称:
- AutoLISP
-
(vl-load-com)
(defun c:Ch2_IterateLayer()
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
layerCollection (vla-get-Layers doc)
msg "")
(vlax-for item layerCollection
(setq msg (strcat msg (vla-get-Name item) "\n"))
)
(alert msg)
)
- VBA(仅限 AutoCAD)
-
Sub Ch2_IterateLayer()
' Iterate through the collection
On Error Resume Next
Dim I As Integer
Dim msg As String
msg = ""
For I = 0 To ThisDrawing.Layers.count - 1
msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf
Next
MsgBox msg
End Sub
找到名为 MyLayer 的图层
以下示例引用名为 MyLayer 的图层,如果该图层不存在,则发出一条消息:
- AutoLISP
-
(vl-load-com)
(defun c:Ch2_FindLayer()
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
layerCollection (vla-get-Layers doc))
(setq ABCLayer (vl-catch-all-apply 'vla-Item (list layerCollection "MyLayer")))
(if (vl-catch-all-error-p ABCLayer)
(alert "The layer 'MyLayer' does not exist.")
)
)
- VBA(仅限 AutoCAD)
-
Sub Ch2_FindLayer()
' Use the Item method to find a layer named MyLayer
On Error Resume Next
Dim ABCLayer As AcadLayer
Set ABCLayer = ThisDrawing.Layers("MyLayer")
If Err <> 0 Then
MsgBox "The layer 'MyLayer' does not exist."
End If
End Sub
|