明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3891|回复: 26

[界面] VB.NET [源码] CAD顶部菜单和停靠面板 侧边栏菜单

[复制链接]
发表于 2024-10-24 19:37:19 | 显示全部楼层 |阅读模式
本帖最后由 pmq 于 2025-4-19 15:48 编辑

VB.NET [源码] CAD顶部下拉菜单,可以自定义配置文件
停靠面板  侧边栏菜单
开发环境 Microsoft Visual Studio 2022, AutoCAD2026
也可以用其它版本,只是引用对应的CAD的三个运行库
accoremgd、acdbmgd、acmgd

抖音搜索用户 GCPX515 查看使用视频:












2024.11.08更新



  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.Windows
  3. Imports System.IO
  4. Imports System.Windows.Forms

  5. Public Class NestedToolbarMenu

  6.     ' 定义命令和宏的配置类
  7.     Public Class CommandConfig
  8.         Public Property Title As String
  9.         Public Property Macro As String
  10.         Public Property SubCommands As List(Of CommandConfig) ' 子菜单
  11.     End Class

  12.     ' 主方法:创建嵌套菜单形式的 PaletteSet
  13.     <CommandMethod("CreateNestedToolbar")>
  14.     Public Sub CreateNestedToolbar()
  15.         ' 配置文件路径
  16.         Dim filePath As String = "C:\Asur\System\commands.txt"
  17.         Dim commands As List(Of CommandConfig) = LoadNestedCommandsFromTextFile(filePath)

  18.         If commands Is Nothing OrElse commands.Count = 0 Then
  19.             MsgBox("未在配置文件中找到有效命令。")
  20.             Exit Sub
  21.         End If

  22.         ' 创建 PaletteSet(可停靠窗口)
  23.         Dim paletteSet As New PaletteSet("Custom Toolbar") With {
  24.             .Style = PaletteSetStyles.ShowPropertiesMenu Or PaletteSetStyles.ShowAutoHideButton, ' 移除了无效的 Pinned 样式
  25.             .MinimumSize = New Drawing.Size(1200, 25)
  26.         }

  27.         ' 创建一个 Panel 来容纳工具
  28.         Dim panel As New Panel() With {
  29.             .Dock = DockStyle.Fill
  30.         }

  31.         ' 创建工具条
  32.         Dim toolStrip As New ToolStrip() With {
  33.             .Dock = DockStyle.Top
  34.         }

  35.         ' 遍历命令列表,添加到工具条
  36.         For Each command In commands
  37.             Dim dropDownButton As New ToolStripDropDownButton() With {
  38.                 .Text = command.Title
  39.             }

  40.             ' 如果有子命令,添加到下拉菜单中
  41.             If command.SubCommands IsNot Nothing AndAlso command.SubCommands.Count > 0 Then
  42.                 For Each subCommand In command.SubCommands
  43.                     Dim subButton As New ToolStripMenuItem() With {
  44.                         .Text = subCommand.Title
  45.                     }

  46.                     ' 设置子命令的点击事件
  47.                     AddHandler subButton.Click, Sub(sender, e)
  48.                                                     Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.SendStringToExecute(subCommand.Macro & vbCr, True, False, False)
  49.                                                 End Sub

  50.                     dropDownButton.DropDownItems.Add(subButton)
  51.                 Next
  52.             End If

  53.             toolStrip.Items.Add(dropDownButton)
  54.         Next

  55.         ' 将工具条添加到 Panel
  56.         panel.Controls.Add(toolStrip)

  57.         ' 将 Panel 添加到 PaletteSet
  58.         paletteSet.Add("Nested Toolbar", panel)
  59.         paletteSet.Size = New Drawing.Size(1200, 25)
  60.         paletteSet.Dock = DockSides.Top  '面板停靠在窗口的顶部
  61.         ' 显示 PaletteSet
  62.         paletteSet.Visible = True
  63.     End Sub

  64.     ' 从文本文件加载嵌套命令配置
  65.     Private Function LoadNestedCommandsFromTextFile(filePath As String) As List(Of CommandConfig)
  66.         Dim commands As New List(Of CommandConfig)
  67.         Dim currentParent As CommandConfig = Nothing

  68.         Try
  69.             If File.Exists(filePath) Then
  70.                 Dim lines = File.ReadAllLines(filePath)

  71.                 For Each line In lines
  72.                     ' 跳过空行和注释
  73.                     If String.IsNullOrWhiteSpace(line) OrElse line.StartsWith("#") Then Continue For

  74.                     ' 判断是否是子命令(通过缩进)
  75.                     If line.StartsWith("    ") Then ' 检测 4 个空格的缩进
  76.                         ' 子命令
  77.                         Dim parts = line.Trim().Split("|"c)
  78.                         If parts.Length = 2 AndAlso currentParent IsNot Nothing Then
  79.                             currentParent.SubCommands.Add(New CommandConfig() With {
  80.                                 .Title = parts(0).Trim(),
  81.                                 .Macro = parts(1).Trim()
  82.                             })
  83.                         End If
  84.                     Else
  85.                         ' 主命令
  86.                         Dim parts = line.Split("|"c)
  87.                         If parts.Length = 2 Then
  88.                             Dim parentCommand As New CommandConfig() With {
  89.                                 .Title = parts(0).Trim(),
  90.                                 .Macro = parts(1).Trim(),
  91.                                 .SubCommands = New List(Of CommandConfig)()
  92.                             }
  93.                             commands.Add(parentCommand)
  94.                             currentParent = parentCommand
  95.                         End If
  96.                     End If
  97.                 Next
  98.             Else
  99.                 MsgBox("未找到配置文件:" & filePath)
  100.             End If
  101.         Catch ex As Exception
  102.             MsgBox("读取配置文件时出错:" & ex.Message)
  103.         End Try

  104.         Return commands
  105.     End Function

  106. End Class

  107. 'commands.txt
  108. 配置文件格式
  109. '===========================

  110. # 主菜单: 绘图
  111. 绘图|
  112.     绘直线 Line|_.LINE
  113.     展点 ZD|_.POINT

  114. # 主菜单: 编辑
  115. 编辑|
  116.     打断 Br|_.BREAK
  117.     分解 EX|_.EXPLODE



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 2明经币 +2 收起 理由
zm880928 + 1 赞一个!
zhoupeng220 + 1 很给力!

查看全部评分

 楼主| 发表于 2024-10-25 08:57:35 | 显示全部楼层
本帖最后由 pmq 于 2024-10-25 14:17 编辑
p-3-ianlcc 发表于 2024-10-24 23:39
请问这个有包含里面的工具插件吗?
还是只是菜单呢?
另外请教有没有2016~2018的版本呢?

ACeL2025.Rar是插件
Asur.Rarvb.net写的菜单
我这电脑没安装低版本的CAD

5.89 s@R.Kw 03/31 fBt:/ 测量绘图计算工具  [url]https://v.douyin.com/iSPKByVY/ 复制此链接,打开Dou音搜索,直接观看视频![/url]
这里有使用视频
 楼主| 发表于 2024-10-29 18:04:16 | 显示全部楼层
zyx1029 发表于 2024-10-29 16:32
谁能告诉一下我这菜鸟    这种程序这么加载到CAD中使用了?DLL那个文件会加载了,菜单文件是放到那里了了? ...


Sur.rar 是自己编程用的一个菜单示例文件
ACeL2025.rar 是一个插件
使用视频抖音
https://www.douyin.com/user/self ... in&showTab=post
发表于 2024-10-31 10:18:03 | 显示全部楼层
pmq 发表于 2024-10-29 18:04
Sur.rar 是自己编程用的一个菜单示例文件
ACeL2025.rar 是一个插件
使用视频抖音

插件加到CAD里了,但是你发的源码用Blend for Visual Studio 2022打开后也看不懂,太高级了!插件的代码也没找到在哪里写的了!这么看还是lisp简单一点!
发表于 2024-10-24 20:11:53 | 显示全部楼层
版本太高了,有低点版本么?
 楼主| 发表于 2024-10-24 20:14:26 | 显示全部楼层
本帖最后由 pmq 于 2024-10-25 14:16 编辑
bai2000 发表于 2024-10-24 20:11
版本太高了,有低点版本么?

CAD什么版本?  这个可以运行在 Auto CAD 2019--2025 64位下
5.89 s@R.Kw 03/31 fBt:/ 测量绘图计算工具  https://v.douyin.com/iSPKByVY/ 复制此链接,打开Dou音搜索,直接观看视频!
发表于 2024-10-24 23:39:54 | 显示全部楼层
请问这个有包含里面的工具插件吗?
还是只是菜单呢?
另外请教有没有2016~2018的版本呢?
发表于 2024-10-25 00:02:47 | 显示全部楼层
支持!!!!!!!!开发环境是什么
发表于 2024-10-25 07:36:33 | 显示全部楼层
这个功能栏具体功能展示一下看看
发表于 2024-10-25 07:59:10 | 显示全部楼层
谢谢分享谢谢分享谢谢分享
 楼主| 发表于 2024-10-25 08:50:26 | 显示全部楼层
本帖最后由 pmq 于 2024-10-25 14:15 编辑
shz9 发表于 2024-10-25 07:36
这个功能栏具体功能展示一下看看

5.89 s@R.Kw 03/31 fBt:/ 测量绘图计算工具  https://v.douyin.com/iSPKByVY/ 复制此链接,打开Dou音搜索,直接观看视频!
这里有使用视频
发表于 2024-10-25 08:58:40 | 显示全部楼层
VB不懂,能教怎么使用吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-4-21 18:06 , Processed in 0.189683 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表