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

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

一、引用

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;
        }
    }
}

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/382383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python 千题 —— 基础篇】查找年龄

Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 班级中有 Tom、Alan、Bob、Candy、Sandy 五个人,他们组成字典 {Tom: 23, Alan: 24, Bob: 21, Candy: 22, Sandy: 21},字典的键是姓名,字典的…

【FPGA开发】Modelsim和Vivado的使用

本篇文章包含的内容 一、FPGA工程文件结构二、Modelsim的使用三、Vivado的使用3.1 建立工程3.2 分析 RTL ANALYSIS3.2.1 .xdc约束(Constraints)文件的产生 3.3 综合 SYNTHESIS3.4 执行 IMPLEMENTATION3.5 烧录程序3.6 程序固化3.6.1 SPI约束3.6.2 .bin文…

postgresql 手动清理wal日志的101个坑

新年的第一天,总结下去年遇到的关于WAL日志清理的101个坑,以及如何相对安全地进行清理。前面是关于WAL日志堆积的原因分析,清理相关可以直接看第三部分。 首先说明,手动清理wal日志是一个高风险的操作,尤其对于带主从的…

《CSS 简易速速上手小册》第6章:高级 CSS 技巧(2024 最新版)

文章目录 6.1 使用 CSS 变量进行设计:魔法配方的调配6.1.1 基础知识6.1.2 重点案例:创建可定制的主题6.1.3 拓展案例 1:响应式字体大小6.1.4 拓展案例 2:使用 CSS 变量创建动态阴影效果 6.2 calc(), min(), max() 等函数的应用&am…

AES加密中的CBC和ECB

目录 1.说明 2.ECB模式(base64) 3.CBC模式 4.总结 1.说明 AES是常见的对称加密算法,加密和解密使用相同的密钥,流程如下: 主要概念如下: ①明文 ②密钥 用来加密明文的密码,在对称加密算…

CTF-PWN-沙箱逃脱-【侧信道爆破】(2021-蓝帽杯初赛-slient)

文章目录 侧信道攻击测信道爆破2021-蓝帽杯初赛-slient先自己准备个flag检查沙箱IDA源码mainsub_A60() 相关知识size_t getpagesize(void)void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);range(i,j)编写相关shellcode发现"的用法此时…

什么是宿主软件?宿主软件有哪些?

什么是宿主软件? 宿主软件就是专业的音乐制作软件,我们日常听到的大多数正规音乐作品都是用宿主软件制作出来的,这些软件一般需要安装各类插件,插件就像寄生虫需要在宿主软件里加载才可以工作。 插件主要分虚拟乐器插件和音频处理插件两类…

JZ36 二叉搜索树与双向链表

目录 题目描述 二叉搜索树与双向链表_牛客题霸_牛客网 题目解析 题目答案 最后 题目描述 二叉搜索树与双向链表_牛客题霸_牛客网 题目解析 这里采用的是采用前序遍历的思想,找到要转换的双向链表的头节点也就是这个二叉搜索树的最左节点,找到之后依…

MySQL篇----第十九篇

系列文章目录 文章目录 系列文章目录前言一、什么是存储过程?用什么来调用?二、如何通俗地理解三个范式?三、什么是基本表?什么是视图?四、试述视图的优点?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

力扣[面试题 01.02. 判定是否互为字符重排(哈希表,位图)

Problem: 面试题 01.02. 判定是否互为字符重排 文章目录 题目描述思路复杂度Code 题目描述 思路 思路1:哈希表 1.若两个字符串长度不相等,则一定不符合题意; 2.创建一个map集合,先将字符串s1中的每一个字符与其对应的数量存入集合…

2024.2.10 DMS(数据库管理系统)初体验

数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库中的数据,数据库管…

大年初一,送出最后8000个红包封面!

今天是大年初一,大家都是怎么安排的? 小灰最近在南方旅游,玩得很开心,后面会给大家分享自己的见闻。 过年期间,大家多少都会给亲朋好友发一些微信红包,拥有个性化的红包封面绝对是一件很酷的事情。 前一段时…

007集——数据存储的端序(大端序和小端序转换代码)——VB/VBA

VB/VBA存储的端序 1、要想制造高性能的VB/VBA代码,离了指针是很难办到的。 2、因为VB/VBA里,用Long来表示指针,而32位(包括64位兼容的)计算机里4字节整数的处理,是最快的方式! 3、要想用指针来处理数据,…

4. ⼤模型微调方法

到底有哪些微调⽅法呢? 第⼀类⽅法:借助OpenAI提供的在线微调⼯具进⾏微调;第⼆类⽅法:借助开源微调框架进⾏微调; 1. OpenAI在线微调⼯具 网址:https://platform.openai.com/docs/guides/fine-tuning/c…

无人机遥感技术应用分析,无人机遥感系统测绘技术详解

由于无人机具有机动快速、使用成本低、维护操作简单等技术特点,因此被作为一种理想的飞行平台广泛应用于军事和民用各个领域。尤其是进入二十一世纪以后,许多国家将无人机系统的研究、开发、应用置于优先发展的地位,体积小、重量轻、探测精度高的新型传感器的不断问世,也使无人…

让Python遇上Office--从编程入门到自动化办公实践

最近仔细的学习了这本《让Python遇上Office》的书,同时把我的学习进程与心得录制了同步视频。 到今天终于把全部90集完成,并且上传到下面的视频平台了,欢迎大家观看并指正! 西瓜视频:https://www.ixigua.com/7300628…

c语言中的隐式类型转换

数据类型转化 我们在实际编程中,不管你是有意的还是无意的,有时候都会让两个不同类型的数据参与运算,编译器为了能够生成CPU可以正常 执行的指令,往往会对数据做类型转换,将两个不同类型的数据转换成同一种数据类型。…

Popper.js:ElementUI 中采用弹出,提示框库,好用的没朋友。

Hi,我贝格前端工场,继续介绍经典的js库,ElementUI 中Tooltip、Select、Cascader、TimePicker等组件中怎么把提示框定位到目标元素的,是用 Popperjs 来实现。 一、Popper.js是什么? Popper.js是一个用于创建弹出式组件…

LLM之LangChain(七)| 使用LangChain,LangSmith实现Prompt工程ToT

如下图所示,LLM仍然是自治代理的backbone,可以通过给LLM增加以下模块来增强LLM功能: Prompter AgentChecker ModuleMemory moduleToT controller 当解决具体问题时,这些模块与LLM进行多轮对话。这是基于LLM的自治代理的典型情况,…

回归预测模型:MATLAB多项式回归

1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展,用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同,多项式回归模型通过引入自变量的高次项来增加模型的复杂度,从而能够拟合数据中的非线性模式。…