C# CAD二次开发添加带按钮的窗口

在 C#中进行 AutoCAD 二次开发,添加窗口(通常指 Windows Forms 窗体)并在其上添加按钮,主要涉及创建 WinForm 项目、引用必要的 AutoCAD .NET API程序集,以及通过命令启动窗体。核心步骤如下:

1. 创建项目与引用首先,创建一个 类库 项目,并添加必要的引用。关键引用包括:

  • acdbmgd.dll (AutoCAD 数据库管理)
  • acmgd.dll (AutoCAD 托管应用程序)
  • System.Windows.Forms (用于创建 Windows 窗体)

需要将 acdbmgd.dllacmgd.dll"复制本地"属性设置为 False,以避免版本冲突。

2. 设计窗体 (Windows Form)

在项目中添加一个新的 Windows 窗体 ,例如 MyForm.cs。通过 Visual Studio 的设计器或代码,可以向窗体上拖放或创建按钮 (Button) 控件。

一个简单的窗体类代码示例如下:

csharp 复制代码
using System.Windows.Forms;

namespace MyCadAddin
{
    public partial class MyForm : Form
    {
        // 声明按钮控件
        private Button myButton;

        public MyForm()
        {
            InitializeComponent();
            // 调用自定义方法来设置窗体控件            SetupForm();
        }

        private void SetupForm()
        {
            // 设置窗体属性 this.Text = "我的CAD工具窗口";
            this.Size = new System.Drawing.Size(300, 200);

            // 创建按钮并设置属性
            myButton = new Button();
            myButton.Text = "点击我";
            myButton.Location = new System.Drawing.Point(100, 80);
            myButton.Size = new System.Drawing.Size(100, 30);

            // 为按钮绑定点击事件 myButton.Click += MyButton_Click;

            // 将按钮添加到窗体的控件集合中 this.Controls.Add(myButton);
        }

        // 按钮点击事件的处理方法
        private void MyButton_Click(object sender, System.EventArgs e)
        {
            MessageBox.Show("按钮被点击了!");
            // 这里可以添加与AutoCAD交互的代码,例如:
            // var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            // doc.Editor.WriteMessage("
执行操作...");
        }
    }
}

3. 创建 AutoCAD 命令以显示窗体

需要创建一个公开的类和方法,并使用 CommandMethod 特性将其注册为 AutoCAD 命令。在该命令方法中,实例化并显示你的窗体。

csharp 复制代码
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using System.Windows.Forms;

[assembly: CommandClass(typeof(MyCadAddin.MyCommands))]

namespace MyCadAddin
{
    public class MyCommands {
        [CommandMethod("ShowMyWindow")]
        public static void ShowMyWindow()
        {
            // 确保窗体在AutoCAD的主线程上创建和显示
            Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(new MyForm());
            
            // 如果希望显示非模态(浮动)窗口,可以使用:
            // System.Windows.Forms.Form form = new MyForm();
            // Autodesk.AutoCAD.ApplicationServices.Application.ShowModelessDialog(form);
        }
    }
}

关键点对比

特性 模态对话框 (ShowModalDialog) 非模态对话框 (ShowModelessDialog)
交互方式 阻塞用户与AutoCAD主窗口的交互,直到窗体关闭。 允许用户在窗体和AutoCAD主窗口之间自由切换。
适用场景 需要用户必须完成或取消某项操作后才能继续。 工具面板、浮动工具栏等需要持续交互的场景。
代码示例 Application.ShowModalDialog(new MyForm()); Application.ShowModelessDialog(new MyForm());

4. 部署与调试

  1. 生成 DLL :编译项目生成 .dll 文件。
  2. 加载到 AutoCAD
    • 在 AutoCAD 中使用 NETLOAD 命令,浏览并选择生成的 .dll 文件。
    • 或者,将 .dll 文件路径添加到 AutoCAD 的信任位置,并通过 AppLoad 命令或自动加载机制加载。
  3. 运行命令 :加载成功后,在 AutoCAD 命令行输入你定义的命令(如 ShowMyWindow),即可弹出带有按钮的窗口。

完整流程示例

假设项目名为 MyCadTool,一个最小化的可运行结构如下:

复制代码
MyCadTool.csproj
|-- References
|   |-- acdbmgd.dll (Copy Local = False)
|   |-- acmgd.dll (Copy Local = False)
|   `-- System.Windows.Forms
|-- MyForm.cs (包含窗体和按钮的代码)
`-- MyCommands.cs (包含ShowMyWindow命令)

按照上述步骤操作,即可在 C# CAD 二次开发中成功添加窗口和按钮。

相关推荐
XiaoZhenHua984 小时前
C#工业机器视觉Recipe配方系统设计:多型号、多相机、多工位参数如何统一管理
c#·软件架构·机器视觉·工业自动化·工业软件·recipe
fujisheng6615 小时前
FUI 导航实践:拆开 Layer、History、Coverage 与 Cache 的组合语义
c#·unity3d
淡海水7 小时前
10-05-高级-模式匹配-CSharp如何改变与数据结构的交互方式
数据结构·算法·c#·模式匹配
XiaoZhenHua988 小时前
C# WinForms + 西门子S7 + SQLite + EPPlus生产数据采集系统架构设计
系统架构·sqlite·c#
Lost of 程序猿9 小时前
船岸数据同步链路实战:SendFlag、单调版本号与断网三天后的续传
后端·c#·asp.net
cjp5601 天前
012.UG二次开发,UG管道服务器与WPF管道通讯,传输JSON数据
c#
jiushidt1 天前
ArcGIS Pro Add‑in 打包流程详解
arcgis·c#·.net·arcgispro
geovindu2 天前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
软件黑马王子2 天前
20.Resources资源加载:基本实现
开发语言·前端框架·c#
张人玉2 天前
基于 C# / .NET 8 + Windows Forms + SQLite 的桌面银行业务演示系统——华夏示范银行管理系统
windows·sqlite·c#·.net