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);// 创建用户自定义控件并设置 ListBoxCustomPaletteControl 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;}}
}

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux CentOS stream 9 alias

alias命令在Linux中用于创建命令别名。它允许用户为常用的命令或命令组合创建短而易记的别名,从而提高工作效率。 alias命令与windows中的快捷方式相同,执行别名时,终端解释器就进行查询与转换,进而执行原来的完整命令。 熟练使用alias命令可以使我们将一长串命令或者一些…

android下library打包aar并上传到maven,嵌入版的app

android嵌入版 准备工作简化代码到三方app上传maven自动打包上面已经完成了library到三方app的流程 这几天在研究android下怎么把自己的项目当作一个library给到另一个app做嵌入使用,把这些记录下来,方便以后参考 准备工作 1.需要了解一些gradle 命令打…

限制Unity帧率的方式

1)限制Unity帧率的方式 2)只在编辑器内,纹理不开启Read&Write情况下,如何获取纹理所有颜色值 3)如何在FBX剔除Lit.shader依 4)如何在iPhone 12mini设备上禁止竖屏 这是第373篇UWA技术知识分享的推送&am…

LInux页高速缓存和页写回

页缓存 页缓存是由内存中的物理页面组成的,其内容对应磁盘上的物理块。 页缓存大小能动态调整,可以占用空闲内存以扩大大小,也可以自我收缩缓解内存使用压力。 如果读一个磁盘内容,我们会读内存,如果存在,…

游戏开发-会飞的小鸟(已完结,附源码)

游戏开发-会飞的小鸟(已完结,附源码) 你将学到的课程链接详细介绍 你将学到的 掌握Java编程的基本技能开发出自己的“会飞的小鸟”游戏对面向对象编程有深刻的理解学会运用常见算法和数据结构解决问题能够独立调试和优化自己的代码 课程链接…

python二维数组初始化的一个极其隐蔽的bug(浅拷贝)

初始化一个三行三列的矩阵 m n 3初始化方式1 a [[0 for i in range(m)] for j in range(n)]初始化方式2 b [] row [0 for i in range(0,m)] for i in range(0,n):b.append(row)分别输出两个初始化的结果 for row in a:print(row) for row in b:print(row)当前的输出为…

用C语言实现单个网页图片爬虫

这段代码是一个使用C语言和libcurl库编写的程序,用于从指定的URL下载图片并保存到本地文件中。下面是该代码的详细介绍: 包含头文件: c #include <stdio.h> #include <curl/curl.h> 这两个头文件分别是标准I/O库和libcurl库的头文件。 定义回调函数: c …

标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程

标准库 STM32EC11编码器I2C ssd1306多级菜单例程 &#x1f4cc;原创项目来源于&#xff1a;https://github.com/AdamLoong/Embedded_Menu_Simple&#x1f4cd;相关功能演示观看&#xff1a;https://space.bilibili.com/74495335 单片机多级菜单v1.2 &#x1f449;本次采用的是原…

springboot162基于SpringBoot的体育馆管理系统的设计与实现

体育馆管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕…

算法练习-二叉树的节点个数【完全/普通二叉树】(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…

广义表-C语言

广义表&#xff08;Generalized List&#xff09;是一种扩展了线性表的数据结构&#xff0c;它在线性表的基础上增加了元素可以是表的特点。在广义表中&#xff0c;元素不仅可以是单个的数据元素&#xff0c;还可以是一个子表&#xff0c;而子表中的元素也可以是数据元素或其他…

Java on VS Code 2024年1月更新|JDK 21支持!测试覆盖率功能最新体验!

作者&#xff1a;Nick Zhu - Senior Program Manager, Developer Division At Microsoft 排版&#xff1a;Alan Wang 大家好&#xff0c;欢迎来到 Visual Studio Code for Java 2024年的第一期更新&#xff01;提前祝愿大家春节快乐&#xff01;在本博客中&#xff0c;我们将有…

jvm一级缓存

1、利用JVM缓存。脱离redis。 2、导包&#xff0c;springboot自带此包。如没有可以导&#xff1a;com.google.guava:guava:20.0的包。 3、直接上代码&#xff1a; package com.leo.cache;import com.alibaba.fastjson.JSONObject; import com.google.common.cache.Cache; im…

开源软件:引领技术创新、商业模式与安全的融合

序 在信息技术日新月异的今天&#xff0c;开源软件以其独特的魅力和影响力&#xff0c;正逐渐成为软件产业的新常态。开源软件的低成本、高度可协作性和透明度等特点&#xff0c;不仅吸引了无数企业和个人用户的青睐&#xff0c;更为软件行业带来了前所未有的繁荣景象。 一、…

复旦微 zynq amp cpu0 唤醒启动cpu1

1 配置多核amp工程&#xff0c;参考上一篇文章 https://blog.csdn.net/yangchenglin927/article/details/136057534 2 在cpu0的main函数中增加唤醒代码 active_cpu1(); /** helloworld.c: simple test application** This application configures UART 16550 to baud rate 96…

Flink SQL Client 安装各类 Connector、Format 组件的方法汇总(持续更新中....)

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

DAY43:背包问题提升1049、494、474

Leetcode: 1049 最后一块石头的重量 II 这道题和昨天的最后一道题很像&#xff0c;都是重量和价值一样等于stone[i]。 本质思想是尽量将石头分成相似的两堆。如果出现两堆价值一样&#xff0c;那0&#xff0c;如果不一样&#xff0c;就用大的那堆减去小的那堆就是最后相撞之后…

数据结构——D/二叉树

&#x1f308;个人主页&#xff1a;慢了半拍 &#x1f525; 创作专栏&#xff1a;《史上最强算法分析》 | 《无味生》 |《史上最强C语言讲解》 | 《史上最强C练习解析》 &#x1f3c6;我的格言&#xff1a;一切只是时间问题。 ​ 1.树概念及结构 1.1树的概念 树是一种非线性的…

【Android辟邪】之:gradle——在项目间共享依赖关系版本

翻译和简单修改自&#xff1a;https://docs.gradle.org/current/userguide/platforms.html#sec:sharing-catalogs 建议看原文&#xff08;有能力的话&#xff09; 现在 Gradle 脚本可以使用两种语法编写&#xff1a;Kotlin 和 Groovy 本文只使用kotlin脚本语法&#xff0c;更…

10.0 Zookeeper 权限控制 ACL

zookeeper 的 ACL&#xff08;Access Control List&#xff0c;访问控制表&#xff09;权限在生产环境是特别重要的&#xff0c;所以本章节特别介绍一下。 ACL 权限可以针对节点设置相关读写等权限&#xff0c;保障数据安全性。 permissions 可以指定不同的权限范围及角色。 …