cclemon 发表于 2022-7-6 12:57:50

如何通过单击停止getentity

我刚刚在autocad中使用VBA一段时间,遇到了一个问题。
 
我尝试在实用程序中编写do循环。getentity通过与无模式用户窗体交互来收集图形中的线。此外,使用“ESC”或根本不选择,我想通过单击我的用户窗体上的按钮来停止输入,但我想不出来。
 
如何通过单击userform上的按钮来停止getentity?

SEANT 发表于 2022-7-6 13:11:24

我从来没有使用过VBA无模式表单,所以我在这里只是猜测,但是如果例程是为了响应应用程序而设置的呢。AppDeactivate事件?它可能允许优雅地退出环路。
 
旁白:有没有理由使用循环实用程序。getentity而不是SelectionSet。选择屏幕?

rocheey 发表于 2022-7-6 13:22:11

 
下面是一些通用代码,当放在用户窗体上时,将允许
点击按钮以跳出在另一个子例程中运行的循环。
 
点击“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公司
末端接头
 
 
'----------------剪断-----------------

SEANT 发表于 2022-7-6 13:38:53

这看起来当然合理。

cclemon 发表于 2022-7-6 13:54:09

谢谢你们,肖特和罗西。
 
实际上,我的代码是这样的:
 
-------------------------------------
 

出错时继续下一步
此图纸。公用事业获取实体ent,ptpick
 
如果不是(ent什么都不是),那么
...
检查实体。。。
根据其句柄从表中检索信息。。。
切换其颜色。。。等
...
如果结束
循环直到(ent什么都不是)
 
-------------------------------------
 
所以rocheey给出的方法在这里可能不起作用,因为它需要我先选择另一个实体来脱离遗传。
 
我在学习应用程序。立即取消激活事件。进展甚微。

SEANT 发表于 2022-7-6 13:58:12

 
回顾过去,我对申请的建议。AppDeactivate可能更适合于进程外(VB6 EXE无模式表单)例程。
 
鉴于VBA例程仍在宿主进程中,切换到表单可能不会生成AutoCAD deactivate事件。
页: [1]
查看完整版本: 如何通过单击停止getentity