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