Atook 发表于 2015-11-27 02:41:01

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

我有一个调色板,可以在绘图中显示存储在字典中的程序集。
调色板包含一个控件,该控件提供了对象列表。当我更新字典时,我刷新了控件。
但是如果我切换活动绘图,则在新绘图中pallete不会从字典中更新。
保持调色板与活动绘图同步的最佳方法是什么?我想我需要捕获一些绘图切换事件并更新pallete。听起来对吗?
如果你有更好的架构,我很乐意听听。
**** Hidden Message *****

huiz 发表于 2015-11-27 08:44:56

Application.DocumentManager。DocumentActivated+=新DocumentCollectionEventHandler(您的_function_to_reset_调色板);

n.yuan 发表于 2015-11-27 10:06:09

我会使用DocumentBecameCurrent,而不是DocumentActivated:当MdiActiveDocument未更改时,如模式对话框或消息框被取消时,DocumentActivated也会触发,在这种情况下,可能不需要刷新调色板视图

huiz 发表于 2015-11-27 10:24:51

啊,说得好。我会用我的代码测试它。

Atook 发表于 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
}

Atook 发表于 2015-11-27 17:40:34

另外,在相关的说明中,将钩子放入文档管理器的好地方在哪里?现在我有一行:Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.DocumentActivated += 。
new DocumentCollectionEventHandler(PaletteSync);作为运行以显示托盘的命令的一部分,但似乎我应该将其放在可以摆脱事件处理程序的位置,现在,如果用户多次执行该命令,我将只堆叠事件处理程序,更不用说如果调色板在启动时可见,并且命令未执行,我将不会让事件处理程序处理我的同步。
页: [1]
查看完整版本: 将调色板与当前绘图同步的最佳方法?