如何通过单击停止getentity
我刚刚在autocad中使用VBA一段时间,遇到了一个问题。我尝试在实用程序中编写do循环。getentity通过与无模式用户窗体交互来收集图形中的线。此外,使用“ESC”或根本不选择,我想通过单击我的用户窗体上的按钮来停止输入,但我想不出来。
如何通过单击userform上的按钮来停止getentity? 我从来没有使用过VBA无模式表单,所以我在这里只是猜测,但是如果例程是为了响应应用程序而设置的呢。AppDeactivate事件?它可能允许优雅地退出环路。
旁白:有没有理由使用循环实用程序。getentity而不是SelectionSet。选择屏幕?
下面是一些通用代码,当放在用户窗体上时,将允许
点击按钮以跳出在另一个子例程中运行的循环。
点击“cmdStartLoop”按钮,通过运行
名为“LoopMe”的子程序。LoopMe子检查名为“UserCancelled”的模块级变量是否更改为true。
如果你的循环代码在另一个模块中,那么让你的“UserCancelled”变为全局变量。。。
'---------剪断-----------------
'模块级代码:
Dim UserCancelled为布尔值
子循环()
UserCancelled=False
做
DoEvents公司
如果UserCancelled=True,则
MsgBox“用户已取消”
退出Do
如果结束
环
末端接头
Private Sub cmdEndLoop_Click()
UserCancelled=True
末端接头
Private Sub-cmdStartLoop\u Click()
LoopMe公司
末端接头
'----------------剪断----------------- 这看起来当然合理。 谢谢你们,肖特和罗西。
实际上,我的代码是这样的:
-------------------------------------
做
出错时继续下一步
此图纸。公用事业获取实体ent,ptpick
如果不是(ent什么都不是),那么
...
检查实体。。。
根据其句柄从表中检索信息。。。
切换其颜色。。。等
...
如果结束
循环直到(ent什么都不是)
-------------------------------------
所以rocheey给出的方法在这里可能不起作用,因为它需要我先选择另一个实体来脱离遗传。
我在学习应用程序。立即取消激活事件。进展甚微。
回顾过去,我对申请的建议。AppDeactivate可能更适合于进程外(VB6 EXE无模式表单)例程。
鉴于VBA例程仍在宿主进程中,切换到表单可能不会生成AutoCAD deactivate事件。
页:
[1]