You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:36:03