比如我有个Control类实例,当它分别指向各种控件时,我如何判断指向的控件是否容器呢?
简单说容器控件和非容器控件有没有什么有区别的属性在Control这层上体现出来呢?除了根据GetType来区分控件具体是哪种控件这种方法以外...谢谢大家~

解决方案 »

  1.   

    如果是容器,它需要实现IContainer 接口。用这个做判断依据。
      

  2.   

    Control.Controls??其始好象C#应该说很多类都是容器的。只是用处不同而已
      

  3.   

    foreach(Control ctrl in this.Controls)
       if(ctrl as IContainer != null)
          MessageBox.Show("true");
       else
          MessageBox.Show("false");
      

  4.   

    zhongwanli:我发现所有Control的Container接口都是存在的怎么判断呢?UPCC:Controls也是所有Control都存在的,只是是否为空而已~~但不能以此判断哦,因为容器控件上面也可以不放其他控件嘛~~752:发现ctrl as IContainer全部都!=null...
      

  5.   

    楼主是从哪里来引出“容器”的概念?如果是指vs开发环境上的工具栏选项卡,那么你可以随便把button拖进“容器”选项卡,并且保持这样使用,也就是说此“容器”其实是用户自己理解和归类。控件的Controls确实经常用于放子控件,但是所有控件包括button也有它。因此可以说所有Control其实都是容器,包括button、textbox,只是这些可能并不使用这个特性。而说IContainer接口,我不知道出自何处,反正反而Panel、GroupBox都不支持IContainer。Panel、GroupBox等在设计器上的表现(可以直接放入/拖入其它控件)取决于其Designer。你似乎可以查找控件的 DesignerAttribute 然后再判断其是否具有 ParentControlDesigner。不过可以在 IDE 上放入其它控件的,并不一定要有这个接口,你完全可以自己从头定义一个自己的Designer。
      

  6.   

    厉害非常佩服sp1234感谢sp1234的关心,我想我所指的容器概念,就是你指的最后一种概念,简单说是在标准使用过程中可以充当其他控件的Parent的Control(这里说“标准使用”是强调是按照WINDOWS使用风格和习惯的,因为我也知道,就是想要把Button当作容器,硬要往里面放入其他控件都是可以的)。比如Panel,GroupBox,TabPage,Form,都是我指的容器概念,谢谢!
      

  7.   

    如果控件只是相对于控件来讲是否是容器的话,那控件就那几种了,你判断一下是不是那几种控件就行了。(就是在部件那里的容器项里面的控件)
    控件都是容器,因为textbox能显示text,那么textbox可以是显示文字的容器,你认为呢?
      

  8.   

    啊~~我指的容器是可以放入其他Control那些哦~~Text是TextBox的属性,也不能这么理解为TextBox能“装”文字就是容器嘛~~我以为说“容器”大家肯定能明白我意思,现在才知道原来容器的理解还是见人见志的,555