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

11 篇文章 0 订阅

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

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);”抛出异常,异常信息如下:

我再把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。

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

        

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值