利用参考文献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