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

相关推荐
喵叔哟7 小时前
4. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--从业务到方案:数据与特征工程:从 CSV 到可训练的 LTR 样本
.net
@LetsTGBot搜索引擎机器人12 小时前
用 Python 打造一个 Telegram 二手交易商城机器人
开发语言·python·搜索引擎·机器人·.net·facebook·twitter
追逐时光者13 小时前
Everything替代工具,一款基于 .NET 开源免费、高效且用户友好文件搜索工具!
后端·.net
追逐时光者1 天前
推荐 12 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
咕白m6251 天前
C# 合并多个PDF文档:高效解决方案
c#·.net
用户298698530141 天前
C# 中 Excel 工作表打印前页面边距的设置方法
后端·.net
CodeCraft Studio2 天前
国产化PDF处理控件Spire.PDF教程:C#中轻松修改 PDF 文档内容
前端·pdf·c#·.net·spire.pdf·编辑pdf·修改pdf
mudtools3 天前
打造.NET平台的Lombok:实现构造函数注入、日志注入、构造者模式代码生成等功能
后端·.net
mudtools3 天前
.NET驾驭Word之力:基于规则自动生成及排版Word文档
后端·.net