集合的成员可以从集合对象被删除,只要使用成员对象的 Erase 方法。例如,下面的代码从 LayerTable 对象中删除层 MyLayer。
在从图形中删除图层前,应该确定它可以被删除。若要确定一个图层或另外的像块(Block) 或文字样式(TextStyle)可以被删除,应该使用 Purge 方法。关于 Purge 方法的更多信息,请参见 清理未引用的命名对象部分。
Imports 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)
''检验名字为 MyLayer 的图层是否已经存在在层表中 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
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
}
}
一旦对象被删除,就不应该在程序后面的部分尝试访问这个对象;否则将会产生错误。上面的例子测试一个对象在再次被访问前是否存在。当需要删除一个对象时,应该使用 Has 方法或 Try Catch 语句捕捉任何出现的异常以检查对象是否存在。更多关于处理异常的信息,请参见 处理错误部分。