none
关于用.NET 开发自定义IDE的问题,急需解决,请高手们帮帮忙啊 RRS feed

  • 问题

  • 各位朋友,我遇到了一个问题搞了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控件进行添加。我的初步分析原因大概是只能添加窗体中的一级控件,而无法填充2级以上的子控件。
     }
    
    
    2010年5月23日 2:42

答案

  • 问题自己解决了,非常感谢各位朋友的帮助。解决方法如下:

     System.ComponentModel.Design.DesignSurface surf;
     System.ComponentModel.Design.IDesignerHost host = (System.ComponentModel.Design.IDesignerHost)surf.GetService(typeof(System.ComponentModel.Design.IDesignerHost));
     host.Container.Add(控件); //重要的就这一行代码,将出问题的代码替换成这行代码即可。
    
    
    再次感谢大家!
    • 已标记为答案 思海 2010年5月23日 17:54
    2010年5月23日 17:54

全部回复

  • 各位朋友,我遇到了一个问题搞了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控件进行添加。我的初步分析原因大概是只能添加窗体中的一级控件,而无法填充2级以上的子控件。
     }
    
    
    2010年5月23日 2:41
  • 各位朋友,我遇到了一个问题搞了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控件进行添加。我的初步分析原因大概是只能添加窗体中的一级控件,而无法填充2级以上的子控件。
     }
    
    
    2010年5月23日 2:43
  • 各位朋友,我遇到了一个问题搞了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控件进行添加。我的初步分析原因大概是只能添加窗体中的一级控件,而无法填充2级以上的子控件。
     }
    
    
    2010年5月23日 2:46
  • 你好!

         如果你要添加Panel下的子控件,可以写个方法,然后用递归的方式添加子控件!

         不知道你的问题是否出在这里啊!


    周雪峰
    2010年5月23日 3:56
    版主
  • 我尝试过了,你说的方法未能解决我的问题

    2010年5月23日 4:15
  • 自己顶一下,问题仍然没有解决,大家多多帮帮忙啊,太感谢了
    2010年5月23日 5:43
  • 问题没有解决,期待中。。。。自己顶一下
    2010年5月23日 5:43
  • 问题没有解决,期待中。。。。自己顶一下
    2010年5月23日 5:44
  • 难道只有我一个人遇到这种问题???问题没有解决,郁闷中。。。。期待答案
    2010年5月23日 10:57
  • 你的代码序列化可能有问题,参考Sharp Develop的Windows Forms设计器看看

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    2010年5月23日 14:59
    版主
  • 问题自己解决了,非常感谢各位朋友的帮助。解决方法如下:

     System.ComponentModel.Design.DesignSurface surf;
     System.ComponentModel.Design.IDesignerHost host = (System.ComponentModel.Design.IDesignerHost)surf.GetService(typeof(System.ComponentModel.Design.IDesignerHost));
     host.Container.Add(控件); //重要的就这一行代码,将出问题的代码替换成这行代码即可。
    
    
    再次感谢大家!
    • 已标记为答案 思海 2010年5月23日 17:54
    2010年5月23日 17:54