SolidWorks 2020 VSTA 3.0 C#宏调用User Form不等待用户操作求解
问题原因
你当前使用的frm.Show()属于无模式窗体调用方法,执行后会立即返回继续运行后续代码,不会阻塞宏的主线程,因此Main方法会直接执行到return语句结束,自然不会等待用户与窗体完成交互。
解决方法
将Show()替换为ShowDialog()即可,后者是模式窗体调用方法,会阻塞当前调用线程,直到用户关闭窗体、点击交互按钮触发窗体返回后,才会继续执行后续逻辑。如果你的窗体内部需要调用SolidWorks API,也可以提前把预分配的swApp对象传递给窗体实例使用。
调整后代码示例
using System.Windows.Forms; // 需确保引入了Forms命名空间 public void Main() { var frm = new Form1(); // 若窗体需要调用SolidWorks接口,可将全局swApp传递给窗体 frm.swApp = swApp; // 模式弹窗,阻塞等待用户交互完成 DialogResult userResult = frm.ShowDialog(); // 可根据用户的交互结果执行对应逻辑 if (userResult == DialogResult.OK) { // 编写用户点击确认后要执行的任务代码 } return; } // The SldWorks swApp variable is pre-assigned for you. public SldWorks swApp;
补充说明
如果需要通过窗体按钮触发返回,你可以直接在窗体设计界面将对应按钮的DialogResult属性设置为预期值(比如确认按钮设为OK,取消按钮设为Cancel),也可以在按钮的点击事件中手动赋值并关闭窗体,示例如下:
// Form1内的确认按钮点击事件 private void btnConfirm_Click(object sender, EventArgs e) { // 编写用户点击确认后要在窗体内执行的逻辑 this.DialogResult = DialogResult.OK; this.Close(); }
内容的提问来源于stack exchange,提问作者DanB
相关产品推荐
相关产品推荐

