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;
}
}
}
//感谢大家的点赞,收藏,转发,关注