使用两个文档
你好我想在一个命令中处理两个文档。
我编写测试代码。但它不起作用。
请提出任何意见。
[CommandMethod("pp")]
publicvoid PlaceDntAno()
{
Document AcadDoc = AcadApp.DocumentManager.MdiActiveDocument;
Database AcadDB = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices.WorkingDatabase;
Editor ED = AcadDoc.Editor;
DocumentCollection AcadDocs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
string tmp = "";
foreach (Document AcadDoc_temp in AcadDocs)
{
if (AcadDoc_temp != AcadDoc)
{
Transaction TR = AcadDoc_temp.TransactionManager.StartTransaction();
using (TR)
{
AcadApp.DocumentManager.MdiActiveDocument = AcadDoc_temp;
Editor ED1 = AcadDoc_temp.Editor;
PromptEntityResult PER = ED1.GetEntity("\nSelect Text::");
if (PER.Status == PromptStatus.OK)
{
ObjectId ObjID = PER.ObjectId;
DBObject DBObj = TR.GetObject(ObjID, OpenMode.ForRead);
tmp = DBObj.ToString();
}
}
TR.Commit();
TR.Dispose();
}
}
AcadApp.DocumentManager.MdiActiveDocument = AcadDoc;
MessageBox.Show(tmp);
}
谢谢
库马尔。 我不确定我是否理解你想做什么。。。。
首先,让我们确保在Visual Studio“错误列表”中查找错误,该列表应该告诉您:
只需替换此行:
换言之:
深入了解逻辑,似乎您正试图在DocumentManager中迭代每个文档,将其设置为MdiActiveDocument,然后提示用户选择一些文本,如果返回有效的PromptStatus,则向用户显示所选对象的DBObject。
不幸的是,您拨打了MessageBox。Show()不在foreach循环的范围内,每次成功选择后,您都会重复覆盖字符串tmp的值。。。这意味着将只存储最后一个选择的有效DBObject,并因此显示。
也许缓解这种情况的一种方法是替换这条线路:
使用此代码段:
一旦foreach循环结束,它应该将每个有效的DBObject存储在自己的行中。
此外,除非我忽略了什么,否则只需提交()事务,并且不调用Dispose()方法。
TR.Commit();
//TR.Dispose();
此外,您忽略了发布此CommandMethod所在的类。。。该类是否被指定为静态类? 你好,RenderMan,
谢谢你的回复。
最后,我通过指定为static并设置CommandFlags解决了这个问题。会话如下所示。
4
... 我很高兴你把它整理好了,但更重要的是,你明白这为什么解决了你的问题吗?
只是为了好玩。。。如果要优化:
5
页:
[1]