各位朋友,我遇到了一个问题搞了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级以上的子控件。
}
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级以上的子控件。
}
参考 :
http://www.microsoft.com/china/MSDN/library/netFramework/netframework/DesignerHosting.mspx?mfr=true
http://www.cnblogs.com/michael-zhang/articles/655267.html
http://www.codeproject.com/KB/architecture/components.aspx
现在我就是用的开源项目,但是开源项目没有完整的,所以找了几个现成的东拼西凑做功能整合,而且我的项目有特殊的需求,到目前为止其他的部分都还算顺利,只是在这个问题上卡住了,郁闷中呢
System.ComponentModel.Design.IDesignerHost host = (System.ComponentModel.Design.IDesignerHost)surf.GetService(typeof(System.ComponentModel.Design.IDesignerHost));
host.Container.Add(控件); //重要的就这一行代码,将出问题的代码替换成这行代码即可。
再次感谢大家!