各位朋友,我遇到了一个问题搞了2天未能解决,因为周一老板就要东西了,我非常急,请大家多多帮忙,在此万分感谢!详细描述如下:我最近正在用.NET的System.ComponentModel.Design.DesignSurface 开发一个IDE,这个IDE新建System.Windows.Forms.Form项目,添加一个Panel控件,在Panel控件中添加一个Button控件,然后保存(到这一步为止能够正确执行,没有任何问题),当反向装载之前保存成功的System.Windows.Forms.Form时,那些已经布局好的窗体和控件能够加载并且可见,Panel控件也按照预期的没出现问题,但是Button不能选择和拖动等操作,我的使窗体上的控件支持设计时操作的代码如下:
 System.ComponentModel.Design.DesignSurface ds;//为了方便描述,这行代码表示一个已经实例化的对象。这里假设已经通过代码填充控件到窗体中。
 System.Collections.Generic.List<System.Windows.Forms.Control> ctls;//这个集合存储了ds所使用的设计时窗体中的所有控件,包括Panel和其下的Button。
 foreach (System.Windows.Forms.Control c in ctls)
 {
  ds.ComponentContainer.Add(c); //问题在这行代码,它只能添加Panel控件,无法添加其下的Button控件进行添加。我的初步分析原因<strong>大概</strong>是只能添加窗体中的一级控件,而无法填充2级以上的子控件。
 }

解决方案 »

  1.   


    参考 :
    http://www.microsoft.com/china/MSDN/library/netFramework/netframework/DesignerHosting.mspx?mfr=true
    http://www.cnblogs.com/michael-zhang/articles/655267.html
      

  2.   

    Form设计器
    http://www.codeproject.com/KB/architecture/components.aspx
      

  3.   

    感谢hyblusea和wuyq11两位朋友,但是在你们给出的例子程序并没有解决我的问题,也许是我没找到相应的处理代码位置,但仍然非常感谢两位热心的朋友。
      

  4.   

    我个人感觉做一个IDE,是比较复杂的事件, 既然时间这么紧迫, 是我的话,就直接拿一个开源项目先用着
      

  5.   

    回 hyblusea:
    现在我就是用的开源项目,但是开源项目没有完整的,所以找了几个现成的东拼西凑做功能整合,而且我的项目有特殊的需求,到目前为止其他的部分都还算顺利,只是在这个问题上卡住了,郁闷中呢
      

  6.   

    问题自己解决了,非常感谢各位朋友的帮助。解决方法如下: System.ComponentModel.Design.DesignSurface surf;
     System.ComponentModel.Design.IDesignerHost host = (System.ComponentModel.Design.IDesignerHost)surf.GetService(typeof(System.ComponentModel.Design.IDesignerHost));
     host.Container.Add(控件); //重要的就这一行代码,将出问题的代码替换成这行代码即可。
    再次感谢大家!