如果控件是.net自带的控件,这个遍历好做,通过Control的Controls属性就行但第三方控件不一定继承Control,上面的方法就行不通看了一些设计器的代码,对于子控件属性的识别也只是写死“Controls”这个属性名称只能来这里看看各位有什么办法!!谢谢

解决方案 »

  1.   


    比如你自定义控件叫AAforeach(AA aa in panel.Controls)
    {}
    //或者
    foreach(Control aa in Panel.Controls)
    {
       if(aa is AA && ((AA)aa).Name == "aa")
       {}
    }
      

  2.   


    都说了,第三方控件不一定继承Control
      

  3.   

    那你的控件不是创建了嘛,你是要从某个.net控件中遍历出自定义控件?还是在自定义控件中遍历某个.net控件?
      

  4.   

    不继承自 Control 的控件还真没见过.
      

  5.   

    虽然没见过没有继承Control的控件,
    不过你这也要解决,
    可以用逆向思维啊,
    遍历所有控件将继承Control的控件除外不就行了
      

  6.   


    现在用的第三方控件叫QIOS,这套东西也不是所有控件都不继承Control,只是部分控件(例如RibbonToolBar)不继承
      

  7.   

    还是需要预先了解其类型,比如 类库的 TabControl 若要遍历, 可以使用 TabPages 属性, Controls 属性.net 2.0 的 toolstrip 系列, 由于可以寄宿控件, 子集合也有非继承自 Control 的.
      

  8.   

    学习了,
    可以查找非继承自 Control            Type controlType = typeof(Control);                      // 获取Control类所在的程序集
                Assembly assembly = Assembly.GetAssembly(typeof(Control));
                foreach (Type type in assembly.GetTypes())
                {
                    // 提取出所有非继承自 Control的类型
                    if (!type.IsSubclassOf(controlType))
                    {
                        //...
                    }
                }
      

  9.   


    大哥,我只是说有些控件不继承Control,不是所有不继承Control的都是控件
      

  10.   


    引用 1 楼 sola040515 的回复:
    比如你自定义控件叫AAC# codeforeach(AA aa in panel.Controls)
    {}
    //或者
    foreach(www.cctv40.comControl aa in Panel.Controls)
    {
    if(aa is AA && ((AA)aa).Name == "aa")
    {}
    }……