none
循环控件controls属性时候的问题 RRS feed

  • 问题

  • 我发觉一个很奇怪的问题,我用foreach语句循环form或者panel的controls属性的时候,循环出来的结果总会少了一两个控件的?这个有什么原因的?
    2009年9月14日 15:34

答案

  • 如果子控件中还存在子控件就会出现你这样的情况,这时你需要使用递归来遍历。
    知识改变命运,奋斗成就人生!
    2009年9月15日 0:50
    版主
  • 你好!
         应该是你的控件中有些本身是容器控件,里面还有子控件,这样就导致有些控件没有遍历到,你可以尝试这个方法:
    public void EnumAllChildControls(Control control)
    {
          foreach(Control child in control.Controls)
          {
                 //这里写利用child的一些代码
                 if(child.HasChildren)
                        EnumAllChildControls(child);
           }
    }
                 

        
        
    周雪峰
    • 已建议为答案 mazhou 2009年9月15日 16:41
    • 已标记为答案 KeFang Chen 2009年9月16日 1:52
    2009年9月15日 2:55
    版主

全部回复

  • 因为它搜索本身内子控件 不算自身控件 你表达不太清楚
    2009年9月14日 15:38
    版主
  • 如果子控件中还存在子控件就会出现你这样的情况,这时你需要使用递归来遍历。
    知识改变命运,奋斗成就人生!
    2009年9月15日 0:50
    版主
  • 你好!
         应该是你的控件中有些本身是容器控件,里面还有子控件,这样就导致有些控件没有遍历到,你可以尝试这个方法:
    public void EnumAllChildControls(Control control)
    {
          foreach(Control child in control.Controls)
          {
                 //这里写利用child的一些代码
                 if(child.HasChildren)
                        EnumAllChildControls(child);
           }
    }
                 

        
        
    周雪峰
    • 已建议为答案 mazhou 2009年9月15日 16:41
    • 已标记为答案 KeFang Chen 2009年9月16日 1:52
    2009年9月15日 2:55
    版主