擦除集合对象的成员 (.NET)
可以使用在成员对象上找到的方法擦除集合对象中的成员。例如,以下代码从对象中删除层 MyLayer。EraseLayerTable 在从图形中擦除图层之前,应确保可以安全地将其移除。要确定是否可以擦除图层或其他命名对象(如块或文本样式),应使用该方法。Purge VB.NETImports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
<CommandMethod("RemoveMyLayer")> _
Public Sub RemoveMyLayer()
'' Get the current document and database, and start a transaction
Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
'' Returns the layer table for the current database
Dim acLyrTbl As LayerTable
acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId, _
OpenMode.ForRead)
'' Check to see if MyLayer exists in the Layer table
If acLyrTbl.Has("MyLayer") = True Then
Dim acLyrTblRec As LayerTableRecord
acLyrTblRec = acTrans.GetObject(acLyrTbl("MyLayer"), _
OpenMode.ForWrite)
Try
acLyrTblRec.Erase()
acDoc.Editor.WriteMessage(vbLf & "'MyLayer' was erased")
'' Commit the changes
acTrans.Commit()
Catch
acDoc.Editor.WriteMessage(vbLf & "'MyLayer' could not be erased")
End Try
Else
acDoc.Editor.WriteMessage(vbLf & "'MyLayer' does not exist")
End If
'' Dispose of the transaction
End Using
End Sub
C#using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
[CommandMethod("RemoveMyLayer")]
public static void RemoveMyLayer()
{
// Get the current document and database, and start a transaction
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Returns the layer table for the current database
LayerTable acLyrTbl;
acLyrTbl = acTrans.GetObject(acCurDb.LayerTableId,
OpenMode.ForRead) as LayerTable;
// Check to see if MyLayer exists in the Layer table
if (acLyrTbl.Has("MyLayer") == true)
{
LayerTableRecord acLyrTblRec;
acLyrTblRec = acTrans.GetObject(acLyrTbl["MyLayer"],
OpenMode.ForWrite) as LayerTableRecord;
try
{
acLyrTblRec.Erase();
acDoc.Editor.WriteMessage("\n'MyLayer' was erased");
// Commit the changes
acTrans.Commit();
}
catch
{
acDoc.Editor.WriteMessage("\n'MyLayer' could not be erased");
}
}
else
{
acDoc.Editor.WriteMessage("\n'MyLayer' does not exist");
}
// Dispose of the transaction
}
}
VBA/ActiveX 代码参考Sub RemoveMyLayer()
On Error Resume Next
'' Get the layer "MyLayer" from the Layers collection
Dim ABCLayer As AcadLayer
Set ABCLayer = ThisDrawing.Layers.Item("MyLayer")
'' Check for an error, if no error occurs the layer exists
If Err = 0 Then
'' Delete the layer
ABCLayer.Delete
'' Clear the current error
Err.Clear
'' Get the layer again if it is found the layer could not be removed
Set ABCLayer = ThisDrawing.Layers.Item("MyLayer")
'' Check for error, if an error is encountered the layer was removed
If Err <> 0 Then
ThisDrawing.Utility.prompt "'MyLayer' was removed"
Else
ThisDrawing.Utility.prompt "'MyLayer' could not be removed"
End If
Else
ThisDrawing.Utility.prompt "'MyLayer' does not exist"
End If
End Sub
擦除对象后,不应在程序后期再次尝试访问该对象;否则将发生错误。上面的示例在再次访问对象之前测试该对象是否存在。当发出擦除对象的请求时,应检查该方法是否存在该对象,或者使用语句捕获发生的任何异常。HasTry 父主题: |
|Archiver|CAD开发者社区
( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2025-11-1 11:33
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.