VB.net 进行CAD二次开发(二)

利用参考文献2,添加面板

执行treeControl = New UCTreeView()时报一个错误:

用户代码未处理 System.ArgumentException

HResult=-2147024809

Message=控件不支持透明的背景色。

Source=System.Windows.Forms

StackTrace:

在 System.Windows.Forms.Control.set_BackColor(Color value)

在 System.Windows.Forms.Form.set_BackColor(Color value)

在 Autodesk.AutoCAD.Windows.AcMgWinformPalette.ResyncToTheme(AcMgWinformPalette* )

在 Autodesk.AutoCAD.Windows.AcMgWinformPalette.Create(AcMgWinformPalette* , CAdUiPaletteSet* pParentWnd)

在 Autodesk.AutoCAD.Windows.PaletteSet.AddCore(String name, AcMgPalette* pPal)

在 Autodesk.AutoCAD.Windows.PaletteSet.Add(String name, Control control)

在 odpmMagProcess.Palettes.Palettes.ShowPalette() 位置 D:\testVBNet\ODPM\odpmMagProcess\Class3.vb:行号 28

在 Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)

在 Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)

在 Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi, Boolean bLispFunction)

在 Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()

InnerException:

搜索了1天关于这个问题的解决方案,并且尝试了这些方案,都没有很好地解决这个问题。

半拉子的解决办法是,给UCDockDrag和UCTteeView添加了构造函数

UCDockDrag.vb

Public Sub New()

' 此调用是设计器所必需的。

InitializeComponent()

' 在 InitializeComponent() 调用之后添加任何初始化。

SetStyle(ControlStyles.SupportsTransparentBackColor, True)

comboBoxDock.BackColor = Color.Red

textBoxDrag.BackColor = Color.Red

Me.BackColor = Color.Red

Me.TransparencyKey = Me.BackColor

End Sub

UCTteeView.vb

Public Class UCTreeView

Public Sub New()

' 此调用是设计器所必需的。

InitializeComponent()

' 在 InitializeComponent() 调用之后添加任何初始化。

SetStyle(ControlStyles.SupportsTransparentBackColor, True)

treeViewEnts.BackColor = Color.Red

dataGridViewEnts.BackgroundColor = Color.Red

'TransparencyKey = Color.FromArgb(1, 0, 0, 0)

Me.BackColor = Color.Red

Me.TransparencyKey = Me.BackColor

End Sub

调试的结果如下:

使用用户控件以后,就没有问题了

面板内的控件都不显示。

换一种思路,搜索其他添加面板的方法。

Imports Autodesk.AutoCAD.Runtime

Imports Autodesk.AutoCAD.Windows

Imports System.Windows.Forms

Namespace Palettes

Public Class Class4

<CommandMethod("CreatePalette")>

Public Sub CreatePalette()

'初始化面板集对象

Dim ps As PaletteSet = New PaletteSet("我的窗体")

ps.MinimumSize = New System.Drawing.Size(300, 300)

' 创建用户自定义的窗体或控件

Dim ctrl As UserControl = New UserControl()

'添加控件到面板集中

ps.Add("My Tab01", ctrl)

ps.Add("My Tab02", ctrl)

'显示面板

ps.Visible = True

'设置面板样式和透明度

ps.Style = PaletteSetStyles.ShowTabForSingle

ps.Opacity = 90

End Sub

End Class

End Namespace

图层选择

<CommandMethod("SelectLayer")>

Public Sub SelectLayer()

Dim doc As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument

If Not doc Is Nothing Then

Dim ps As PaletteSet = New PaletteSet("Select Layer")

ps.Style = PaletteSetStyles.ShowAutoHideButton Or PaletteSetStyles.ShowCloseButton

ps.Size = New System.Drawing.Size(200, 100)

Dim comboBox As System.Windows.Forms.ComboBox = New System.Windows.Forms.ComboBox()

For Each layer As LayerTableRecord In GetLayerList()

comboBox.Items.Add(layer.Name)

Next

Dim okButton As System.Windows.Forms.Button = New System.Windows.Forms.Button()

okButton.Text = "OK"

AddHandler okButton.Click,

Sub(sender, e)

Dim selectedLayer As String = comboBox.SelectedItem.ToString()

Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Selected Layer: " + selectedLayer)

End Sub

Dim panel As System.Windows.Forms.Panel = New System.Windows.Forms.Panel()

panel.Controls.Add(comboBox)

panel.Controls.Add(okButton)

ps.Add("Select Layer", panel)

ps.Visible = True

End If

End Sub

VS2013 的MSDN文档的ISO下载和安装见参考文献6

参考文献

AutoCAD C# 自动加载自定义RibbonUI界面_怎么给autocad换ui-CSDN博客

VB.net 关于给autoCAD添加 面板_application.getsystemvariable("menuname")-CSDN博客

https://bbs.csdn.net/topics/80039904

C# CAD交互界面-自定义面板集-comboBox选择图层_cad c#-CSDN博客

C# CAD交互界面-自定义面板集(四) - 技术栈

https://www.cnblogs.com/strangekitty/p/4707400.html

C#中=>使用_c# =>-CSDN博客

AddHandler 语句 - Visual Basic | Microsoft Learn

VB.NET 中动态添加按钮并添加点击事件-CSDN博客

Lambda 表达式 - Visual Basic | Microsoft Learn

相关推荐
chenglin0168 小时前
.NET中,const和readonly区别
开发语言·.net
绿龙术士16 小时前
C#核心知识
c#·.net
码观天工19 小时前
.NET AI Preview 2 发布:从 .NET Aspire 支持到 Qdrant 向量数据库集成,助你快速构建云原生 AI 应用
ai·c#·.net·向量数据库·aspire·qdrant
时光追逐者19 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
c#·.net·.netcore
CHQIUU20 小时前
在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战
c#·json·.net
o0向阳而生0o21 小时前
27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?
c#·.net
九鼎科技-Leo1 天前
写windows服务日志-.net4.5.2-定时修改数据库中某些参数
数据库·windows·.net
Agile.Zhou1 天前
Dynamic adaptation to application sizes (DATAS) GC 策略
.net
冰茶_1 天前
WPF之XAML基础
microsoft·微软·c#·.net·wpf·xaml·xamarin