乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 78|回复: 6

[编程交流] 使用两个文档

[复制链接]

40

主题

103

帖子

63

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-6 22:25:12 | 显示全部楼层 |阅读模式
你好
 
我想在一个命令中处理两个文档。
我编写测试代码。但它不起作用。
 
请提出任何意见。
 
  1. [size=2][[/size][size=2][color=#2b91af][size=2][color=#2b91af]CommandMethod[/color][/size][/color][/size][size=2]([/size][size=2][color=#a31515][size=2][color=#a31515]"pp"[/color][/size][/color][/size][size=2])][/size]
  2. [size=2][color=#0000ff][size=2][color=#0000ff]public[/color][/size][/color][/size][size=2][color=#0000ff][size=2][color=#0000ff]void[/color][/size][/color][/size][size=2] PlaceDntAno()[/size]
  3. [size=2]{[/size]
  4. [size=2][color=#2b91af][size=2][color=#2b91af]Document[/color][/size][/color][/size][size=2] AcadDoc = [/size][size=2][color=#2b91af][size=2][color=#2b91af]AcadApp[/color][/size][/color][/size][size=2].DocumentManager.MdiActiveDocument;[/size]
  5. [size=2][color=#2b91af][size=2][color=#2b91af]Database[/color][/size][/color][/size][size=2] AcadDB = Autodesk.AutoCAD.DatabaseServices.[/size][size=2][color=#2b91af][size=2][color=#2b91af]HostApplicationServices[/color][/size][/color][/size][size=2].WorkingDatabase;[/size]
  6. [size=2][color=#2b91af][size=2][color=#2b91af]Editor[/color][/size][/color][/size][size=2] ED = AcadDoc.Editor;[/size]
  7. [size=2][color=#2b91af][size=2][color=#2b91af]DocumentCollection[/color][/size][/color][/size][size=2] AcadDocs = Autodesk.AutoCAD.ApplicationServices.[/size][size=2][color=#2b91af][size=2][color=#2b91af]Application[/color][/size][/color][/size][size=2].DocumentManager;[/size]
  8. [size=2][color=#0000ff][size=2][color=#0000ff]string[/color][/size][/color][/size][size=2] tmp = [/size][size=2][color=#a31515][size=2][color=#a31515]""[/color][/size][/color][/size][size=2];[/size]
  9. [size=2][color=#0000ff][size=2][color=#0000ff]foreach[/color][/size][/color][/size][size=2] ([/size][size=2][color=#2b91af][size=2][color=#2b91af]Document[/color][/size][/color][/size][size=2] AcadDoc_temp [/size][size=2][color=#0000ff][size=2][color=#0000ff]in[/color][/size][/color][/size][size=2] AcadDocs)[/size]
  10. [size=2]{[/size]
  11. [size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2] (AcadDoc_temp != AcadDoc)[/size]
  12. [size=2]{[/size]
  13. [size=2][color=#2b91af][size=2][color=#2b91af]Transaction[/color][/size][/color][/size][size=2] TR = AcadDoc_temp.TransactionManager.StartTransaction();[/size]
  14. [size=2][color=#0000ff][size=2][color=#0000ff]using[/color][/size][/color][/size][size=2] (TR)[/size]
  15. [size=2]{[/size]
  16. [size=2][color=#2b91af][size=2][color=#2b91af]AcadApp[/color][/size][/color][/size][size=2].DocumentManager.MdiActiveDocument = AcadDoc_temp;[/size]
  17. [size=2][color=#2b91af][size=2][color=#2b91af]Editor[/color][/size][/color][/size][size=2] ED1 = AcadDoc_temp.Editor;[/size]
  18. [size=2][color=#2b91af][size=2][color=#2b91af]PromptEntityResult[/color][/size][/color][/size][size=2] PER = ED1.GetEntity([/size][size=2][color=#a31515][size=2][color=#a31515]"\nSelect Text::"[/color][/size][/color][/size][size=2]);[/size]
  19. [size=2][color=#0000ff][size=2][color=#0000ff]if[/color][/size][/color][/size][size=2] (PER.Status == [/size][size=2][color=#2b91af][size=2][color=#2b91af]PromptStatus[/color][/size][/color][/size][size=2].OK)[/size]
  20. [size=2]{[/size]
  21. [size=2][color=#2b91af][size=2][color=#2b91af]ObjectId[/color][/size][/color][/size][size=2] ObjID = PER.ObjectId;[/size]
  22. [size=2][color=#2b91af][size=2][color=#2b91af]DBObject[/color][/size][/color][/size][size=2] DBObj = TR.GetObject(ObjID, [/size][size=2][color=#2b91af][size=2][color=#2b91af]OpenMode[/color][/size][/color][/size][size=2].ForRead);[/size]
  23. [size=2]tmp = DBObj.ToString();[/size]
  24. [size=2]}[/size]
  25. [size=2]}[/size]
  26. [size=2]TR.Commit();[/size]
  27. [size=2]TR.Dispose();[/size]
  28. [size=2]}[/size]
  29. [size=2]}[/size]
  30. [size=2][color=#2b91af][size=2][color=#2b91af]AcadApp[/color][/size][/color][/size][size=2].DocumentManager.MdiActiveDocument = AcadDoc;[/size]
  31. [size=2][color=#2b91af][size=2][color=#2b91af]MessageBox[/color][/size][/color][/size][size=2].Show(tmp);[/size]
  32. [size=2]}[/size]

 
 
谢谢
库马尔。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:42:12 | 显示全部楼层
我不确定我是否理解你想做什么。。。。
 
首先,让我们确保在Visual Studio“错误列表”中查找错误,该列表应该告诉您:
 
只需替换此行:
换言之:
深入了解逻辑,似乎您正试图在DocumentManager中迭代每个文档,将其设置为MdiActiveDocument,然后提示用户选择一些文本,如果返回有效的PromptStatus,则向用户显示所选对象的DBObject。
 
不幸的是,您拨打了MessageBox。Show()不在foreach循环的范围内,每次成功选择后,您都会重复覆盖字符串tmp的值。。。这意味着将只存储最后一个选择的有效DBObject,并因此显示。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:48:34 | 显示全部楼层
 
也许缓解这种情况的一种方法是替换这条线路:
 
 
使用此代码段:
一旦foreach循环结束,它应该将每个有效的DBObject存储在自己的行中。
 
此外,除非我忽略了什么,否则只需提交()事务,并且不调用Dispose()方法。
 
  1.                    TR.Commit();
  2.                    //TR.Dispose();
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 22:56:58 | 显示全部楼层
此外,您忽略了发布此CommandMethod所在的类。。。该类是否被指定为静态类?
回复

使用道具 举报

40

主题

103

帖子

63

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-6 23:13:15 | 显示全部楼层
你好,RenderMan,
 
谢谢你的回复。
 
最后,我通过指定为static并设置CommandFlags解决了这个问题。会话如下所示。
 
  1. 4
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:22:27 | 显示全部楼层
 
... 我很高兴你把它整理好了,但更重要的是,你明白这为什么解决了你的问题吗?
回复

使用道具 举报

11

主题

46

帖子

36

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 23:29:41 | 显示全部楼层
 
 
只是为了好玩。。。如果要优化:
 
  1. 5
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 11:13 , Processed in 0.353211 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表