我正在为 AutoCAD 2011 开发自己的用户控件,但我一直无法弄清楚如何中断用户控件的关闭并在继续关闭之前插入我自己的函数。
为了清楚起见,这里有一个捕获。
基本上在窗口关闭之前,我需要清除隐藏在模型空间后面的一些我自己的层,因为如果用户可以关闭工具并继续而不执行擦除,那么最终在添加新的层时会导致问题对象/保存/等等。我当然不能相信用户在退出之前会点击 UC 上的“擦除”按钮,这只是自找麻烦。
所以我的问题是:我在 API 中的哪里查找关闭用户控件的代码?
当您单击“X”标记时,Acad 调色板实际上并未关闭(处置)。它们只是被隐藏了。 您可能想尝试
PaletteState::StateChanged
活动。当您“关闭”调色板集时可能会触发它。只需为该事件注册一个委托并查看它是否被调用。可能有用。
* 编辑* 现在我想更多了,您应该能够通过将委托注册到自定义控件的
Control.VisibleChanged
事件来捕获该事件。您作为子级添加到 PaletteSet 的调色板。这应该有效。
这更像是一条评论,而不是一个答案,但我担心它最终会太大而无法发表评论。这里有一些值得思考的地方。我会尽力表现得温柔,但在那些认识我的人中,我并不因为我的温柔而被人所知......;)
我担心你会以一种……不太理想的架构方式来解决这个问题。您的问题表明您希望用户执行模态操作(命令 - 显示对话框 - 使用对话框执行操作 - 关闭对话框),但您使用的是无模式(可能始终打开)GUI 元素(
PaletteSet
)。
您是否问过自己 - 如果用户从未关闭对话框会发生什么?有了
PaletteSet
,他们就有了这个选择。在这种情况下,你的“擦除”将永远不会运行。这也会导致以后出现问题吗?
我想我鼓励您问的问题是“
PaletteSet
是适合我正在做的工作的工具吗?”我只是根据您的描述和屏幕截图猜测工作和工作流程,但我的猜测与我有关。我想知道您是否真正想在这里使用的是一个简单的模式表单,从当前启动您的 PaletteSet
的任何机制启动,用户必须使用“确定”按钮关闭,然后您将在“确定”中执行“擦除”处理程序。
如果您使用
PaletteSet
的原因是因为用户必须在绘图处于活动状态时与其进行交互,则有一些方法可以使模式对话框摆脱困境并允许他们选择实体或所需的任何内容。请记住,当无模式 PaletteSet
处于活动状态时,用户实际上可以执行任何其他操作 - 打开其他图形、绘制实体、外部参照其他图形、运行其他命令等。您的对话框是否需要它们具有那么大的灵活性?它准备好在所有这些情况下妥善处理自己了吗?
即使我完全误解了您的情况,我希望这对您有所帮助。