我在设计自己的软件界面时要用到画布,于是考虑使用Usercontrol来实现棋盘效果的画布,当完成画布代码设计后,我想把它作为控件放入到我的软件中的ToolStripContainer中,如何实现?
我试了网上的方法,都不行!!其一是:编译生成项目后自定义控件就可以自动加载到工具箱里,可是我的项目工程还有部分代码未完成,无法正确生成解决方案。另一种方法是:在工具箱中-》选择-》找到自定义控件生成的dll(可能是上面项目没生成的缘故,所以根本找不到dll文件,后来查找网上的说dll应该是外部的,可是我的usercontrol与winform在同一个项目中)。
请问还有其他简单方法吗?因为第一次使用usercontrol,请各位务必详细说明!

解决方案 »

  1.   

    把你的控件即内部实现,都做成单独的dll,这样只编译这个dll即可,然后引入使用
      

  2.   

    如果出现错误很多的话,可以考虑分开多个来实现或是部分可以独立的另外建工程来实现。将实现的工程生成dll文件后,可以拖放到工具箱中使用。
      

  3.   

    我刚刚找了一些别人用usercontrol做的画布控件,结果发现打开这些项目后,在工具箱里并没这些自定义控件,在项目文件夹下也没发现相关dll,但是在这些项目的窗体里却有这种画布自定义控件usercontrol,如果是用各位上面说的方法做的话,为什么在工具箱中看不到这些自定义控件呢???
      

  4.   

    你说的方法我试过了,控件可以导入但是问题是,控件中引用的类在单独生成dll后,再加载进入工程项目时会发生与项目中类的冲突,如何解决?
      

  5.   

    1、把错误的代码注释掉, ctrl+K   加 ctrl+c  。
    2、要不 就单独把这个控件建个项目, 怎么会有冲突呢, 单独做项目,项目的名称要变,估计命名空间冲突吧? 修改namespace。。
      

  6.   


    dll要手动添加到工具箱的,你不添加怎么会有呢?
      

  7.   

     以上各位提供的方法,我都仔细做了一下,自定义控件可以引入工具箱。但会出现下列报错:
    与“ImageSeg.Dialog.RegionDialog.RegionDialog(ImageSeg.Widget.Canvas)”最匹配的重载方法具有一些无效参数,参数“1”: 无法从“ControlLib.Canvas”转换为“ImageSeg.Widget.Canvas”
    下面是我定位到得报错的语句: RegionDialog dlg = new RegionDialog(this.canvasMain);
    //RegionDialog是我建的form窗体,他有一个构造函数 public RegionDialog(Canvas parent)
        {
          InitializeComponent();      this.canvas = parent;
          this.srcImage = this.canvas.Image;
        }
    Canvas是我写的画布类,我为了生成画布这个自定义控件,就把原项目中Canvas类用到的其他类单独提取出来,新建了一个新命名控件的窗体控件项目,然后顺利生成了dll,再倒入我原项目的工具箱里应用到窗体上,就出现上面的问题了。请问各位,我这样做错误在哪里?谢谢!!