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

相关推荐
慧都小妮子24 分钟前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
霍先生的虚拟宇宙网络2 小时前
.net 支持跨平台(桌面)系列技术汇总
.net
djk88883 小时前
.net的winfrom程序 窗体透明&打开窗体时出现在屏幕右上角
.net
九鼎科技-Leo12 小时前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
dot.Net安全矩阵17 小时前
.NET 通过模块和驱动收集本地EDR的工具
windows·安全·web安全·.net·交互
zls36536517 小时前
.NET开源实时应用监控系统:WatchDog
.net
djk888817 小时前
.net将List<实体1>的数据转到List<实体2>
数据结构·list·.net
Crazy Struggle1 天前
功能齐全的 WPF 自定义控件资源库(收藏版)
.net·wpf·ui控件库
时光追逐者1 天前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
zls3653651 天前
.NET高效下载word文件
开发语言·c#·word·.net