CAD PaletteSet对象加载Form方案 以及 处理 控件不支持透明的背景色 异常

文采不好,就直接来点源码希望个位开发者喜欢:

public static PaletteSet paletteSet = null;
        public static void CreateWigPlatte(System.Windows.Forms.Form frm, bool Visiable = true, DockSides dock = DockSides.Left)
        {
            //初始化项目面板
            if (paletteSet == null)
            {
                paletteSet = new PaletteSet("LTYTool");
                paletteSet.Dock = dock;
                paletteSet.Visible = Visiable;
            }
            if (paletteSet.Count > 0)
                paletteSet.Remove(0);

            paletteSet.Add(frm.Text, frm);
            frm.Visible = true;
            paletteSet.SetSize(frm.Size);
            if (frm != null)
            {
                frm.Dock = System.Windows.Forms.DockStyle.Fill;
            }
        }

这里我把PaletteSet定义了一个全局的对象,不断的加载不同的Form,并改变paletteSet的大小。

但是如果不做其他处理,上面的代码会在“paletteSet.Add(frm.Text, frm);”抛出异常,异常信息如下:

CAD PaletteSet对象加载Form方案 以及 处理 控件不支持透明的背景色 异常_第1张图片

我再把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)
   在 TYLinCivil3DTool.PletteSetManage.CreateWigPlatte(Form frm, Boolean Visiable, DockSides dock) 位置 C:\chenjiang\CODE\TYLinCivil3DTool\TYLinCivil3DTool\BaseOper\PletteSetManage.cs:行号 67
   在 TYLinCivil3DTool.CommandMenu.TTest1() 位置 C:\chenjiang\CODE\TYLinCivil3DTool\TYLinCivil3DTool\Menus\CommandMenu.cs:行号 69

开始的时候个人认为肯定是Cad的api出现了bug,一直从api方面下手,找了两个小时左右,我觉得还是重新看看错误信息,大家注意,我已经把上面的信息有些文字加粗了

个人思路:

1.Control.set_BackColor 去查看paletteSet是不是,结果,它不是继承的System.Windows.Forms;那就只有我的参数System.Windows.Forms.Form frm的问题了,

2.结果我写了这么一行代码去测试“ frm.set_BackColor(**)”,可惜,连编译都不过,接着我有写了这么一行“form.BackColor = Color.Transparent;”,当然后面要跟一个透明的颜色哈,不然看不到效果。

3.结果类似的异常就出来了,最上面的两行都是:

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

离成功更进一步了。

4.在找找资料,如何让Form能够透明,很多答案我试了不行,这里分享一个有用的:

https://zhidao.baidu.com/question/156802845.html

在构造函数中调用窗体的 SetStyle。
SetStyle(ControlStyles.SupportsTransparentB_a_c_kColor, true);这将使控件能够支持透明背景色。

一切Over。

当然最后苦尽甘来,一切相安无事!

        

你可能感兴趣的:(cad,IT,其他,前端)