乐筑天下

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

将调色板与当前绘图同步的最佳方法?

[复制链接]

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2015-11-27 02:41:01 | 显示全部楼层 |阅读模式
我有一个调色板,可以在绘图中显示存储在字典中的程序集。
调色板包含一个控件,该控件提供了对象列表。当我更新字典时,我刷新了控件。
但是如果我切换活动绘图,则在新绘图中pallete不会从字典中更新。
保持调色板与活动绘图同步的最佳方法是什么?我想我需要捕获一些绘图切换事件并更新pallete。听起来对吗?
如果你有更好的架构,我很乐意听听。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

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

铜币
331
发表于 2015-11-27 08:44:56 | 显示全部楼层
Application.DocumentManager。DocumentActivated+=新DocumentCollectionEventHandler(您的_function_to_reset_调色板);
回复

使用道具 举报

4

主题

219

帖子

4

银币

后起之秀

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

铜币
238
发表于 2015-11-27 10:06:09 | 显示全部楼层
我会使用DocumentBecameCurrent,而不是DocumentActivated:当MdiActiveDocument未更改时,如模式对话框或消息框被取消时,DocumentActivated也会触发,在这种情况下,可能不需要刷新调色板视图
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

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

铜币
331
发表于 2015-11-27 10:24:51 | 显示全部楼层
啊,说得好。我会用我的代码测试它。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2015-11-27 17:34:14 | 显示全部楼层

谢谢你们!我实现了两者,但在DocumentBecameCurrent之后多次切换打开的图形时遇到异常。下面的第12行引发异常:<em>(Autodesk.AutoCAD.Runtime.exception:eNotFrom位于Autodesk.AutoCAD.DatabaseServices.TransactionManager.GetObjectInternal的此文档(AcDbTransactionManager*pTM,ObjectId,OpenMode模式,布尔OpenArsed,布尔forceOpenOnLockedLayer)</em><br>如果使用DocumentActivated,则工作正常。从DocumentBecameCurrent崩溃的代码如下。我想知道这是否与在数据库切换完全发生之前执行有关
///
///返回节点中指定字典的值。如果字典不存在,
///它将被创建,并返回新词典。
//
//
//
您想要的字典。
公共静态DBDictionary GetNamedDictionary(字符串dictionaryName)
{
DBDictionary:myDbDictionary=null
使用(LockedTransaction tr=Active.Document.TransactionManager.StartLockedTransaction())
{
DBDictionary nod=tr.GetObject(HostApplicationServices.WorkingDatabase.NamedObjectsDictionaryId,
OpenMode。ForWrite)作为DBDictionary;//
如果(nod.Contains(dictionaryName))
{
myDbDictionary=(DBDictionary)tr.GetObject(nod.GetAt(dictionaryName),OpenMode.ForRead)
调试。打印(“找到的词典:”+dictionaryName)
}
其他
{
myDbDictionary=newdbdictional()
点头。SetAt(dictionaryName,myDbDictionary)
tr.AddNewlyCreatedDBObject(myDbDictionary,true)
调试。打印(“添加词典:”+dictionaryName)
}
tr.Commit()
}
返回myDbDictionary
}
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2015-11-27 17:40:34 | 显示全部楼层
另外,在相关的说明中,将钩子放入文档管理器的好地方在哪里?现在我有一行:Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.DocumentActivated += 。
new DocumentCollectionEventHandler(PaletteSync);作为运行以显示托盘的命令的一部分,但似乎我应该将其放在可以摆脱事件处理程序的位置,现在,如果用户多次执行该命令,我将只堆叠事件处理程序,更不用说如果调色板在启动时可见,并且命令未执行,我将不会让事件处理程序处理我的同步。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 21:54 , Processed in 0.150616 second(s), 64 queries .

© 2020-2025 乐筑天下

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