C# CAD交互界面-自定义面板集-添加快捷命令(五)

运行环境 vs2022 c# cad2016  调试成功

一、引用

C# CAD交互界面-自定义面板集-添加快捷命令(五)_第1张图片

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using System;
using System.Drawing;
using System.Windows.Forms;

二、代码说明

  • [CommandMethod("CreatePalette")] 标注的方法 CreatePalette() 是一个在AutoCAD中注册的命令方法,当用户在命令行输入 CreatePalette 时,会触发此方法。

    • 初始化一个新的 PaletteSet 对象,命名为 "我的窗体",并设置了其最小尺寸为300x300像素。

    • 创建一个 CustomPaletteControl 实例,并将 ListBox 的选择更改事件绑定到 ListBoxItemSelected 方法。

    • 向 ListBox 中添加两个 CommandItem 对象,每个对象代表一个具有显示名称和实际命令名的AutoCAD命令或脚本别名(这里假设 "tt10" 和 "tt11" 分别代表某个CAD命令或LISP脚本)。

    • 将 CustomPaletteControl 添加至名为 "快捷键01" 的面板标签下。

    • 最后设置面板集可见,使其出现在AutoCAD界面上。

  • ExecuteAutoCADCommand(string commandName) 方法用于执行传入的AutoCAD命令字符串。当调用此方法时,会在当前活动文档中发送执行命令的指令。

  • ListBoxItemSelected(object sender, EventArgs e) 是 ListBox 选择更改事件的代理方法。当用户从 ListBox 中选择一项时,如果所选项目是一个 CommandItem 并且拥有非空的 CommandName,则通过 ExecuteAutoCADCommand 执行对应的命令,并在命令末尾添加换行符 "\n"(这通常是为了在命令历史记录中区分不同的命令输入)。

  • CustomPaletteControl 类继承自 UserControl,表示承载 ListBox 控件的用户界面元素。构造函数接收 ListBox 选择更改事件的处理程序,并初始化 ListBox 控件的位置、大小以及事件处理。

  • CommandItem 类是一个简单的数据传输对象,用来封装命令的显示名称(DisplayName)和实际命令名(CommandName)。当 ListBox 显示项目时,会调用其 ToString() 方法返回 DisplayName 属性作为显示文本。

三、完整代码

//根据自己要求自己添加 格式如下
customCtrl.ListBox1.Items.Add(new CommandItem("CAD宗地内面积", "tt10"));
customCtrl.ListBox1.Items.Add(new CommandItem("导入", "tt11")); // 假设 dd10 是一个自定义 LISP 或其他扩展的别名

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace cad自定义面板集
{
    public class Class1
    {
        [CommandMethod("CreatePalette")]
        public void CreatePalette()
        {


            // 初始化面板集对象
            PaletteSet ps = new PaletteSet("我的窗体");
            ps.MinimumSize = new System.Drawing.Size(300, 300);

            // 创建用户自定义控件并设置 ListBox
            CustomPaletteControl customCtrl = new CustomPaletteControl(ListBoxItemSelected);
            customCtrl.ListBox1.Items.Add(new CommandItem("CAD宗地内面积", "tt10"));
            customCtrl.ListBox1.Items.Add(new CommandItem("导入", "tt11")); // 假设 dd10 是一个自定义 LISP 或其他扩展的别名

            // 添加控件到面板集中
            ps.Add("快捷键01", customCtrl);
 
            // 可以添加更多控件...

            // 显示面板
            ps.Visible = true;
        }

        private void ExecuteAutoCADCommand(string commandName)
        {
            Document adoc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            adoc.SendStringToExecute(commandName, true, false, false);
        }

        // ListBox 选择更改事件代理方法
        private void ListBoxItemSelected(object sender, EventArgs e)
        {
            if (sender is ListBox listBox && listBox.SelectedItem is CommandItem item && !string.IsNullOrEmpty(item.CommandName))
            {

                ExecuteAutoCADCommand(item.CommandName + "\n");
   
            }
        }
    }

    // 定义承载 ListBox 的 UserControl 类
    public class CustomPaletteControl : UserControl
    {
        public ListBox ListBox1 { get; private set; }

        // 添加构造函数接收 ListBox 选择更改事件代理
        public CustomPaletteControl(EventHandler listBoxSelectedIndexChangedHandler)
        {
            ListBox1 = new ListBox();
            ListBox1.Location = new Point(5, 5);
            ListBox1.Size = new Size(280, 250);

            // 添加 ListBox 选择更改事件处理程序
            ListBox1.SelectedIndexChanged += listBoxSelectedIndexChangedHandler;

            this.Controls.Add(ListBox1);
        }
    }

    // 用于存储命令名称的简单类
    public class CommandItem
    {
        public string DisplayName { get; set; }
        public string CommandName { get; set; }

        public CommandItem(string displayName, string commandName)
        {
            DisplayName = displayName;
            CommandName = commandName;
        }

        public override string ToString()
        {
            return DisplayName;
        }
    }
}

C# CAD交互界面-自定义面板集-添加快捷命令(五)_第2张图片

C# CAD交互界面-自定义面板集-添加快捷命令(五)_第3张图片

C# CAD交互界面-自定义面板集-添加快捷命令(五)_第4张图片

//感谢大家的点赞,收藏,转发,关注 

你可能感兴趣的:(CAD二次开发,c#,交互,开发语言)