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

相关推荐
波力海苔夹心脆67517 小时前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
hez201019 小时前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
QUDONG_biubiubiu1 天前
.NET Runtime 6.0/7.0/8.0/9.0下载修复教程,软件打不开这样解决
.net·net runtime下载·net运行库修复·net runtime安装
宝桥南山1 天前
.NET 11 - 尝试创建一下AGUIServer和AGUIClient(基于新版.NET SDK for AG-UI)
microsoft·ai·微软·c#·aigc·.net
波力海苔夹心脆6751 天前
C# LINQ 入门到上手:一篇讲透查询语法、常用操作符与延迟执行(含示例与速查表
经验分享·c#·.net·solr·linq
小羊没烦恼!2 天前
Windows Azure Platform体验(1):Windows Azure
java·大数据·后端·python·flask·word·.net
CSharp精选营3 天前
IIS 后面挂 Kestrel,这 3 个配置错了就 502
kestrel·.net·iis配置
鑫 源3 天前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
xiangcns5 天前
PDMS PiplineTool(三十)一堆小优化+一个彩蛋功能
.net·二次开发·pdms