这里的容器是指可以作parent的,也就是说在设计时,如同panel, pagecontrol类似的,可以往上边拖其它控件的东西,
我们平常在作设计时,从面板上选择一个控件,然后在设计窗体上点击,就会在窗体上放上了一个选中的控件,比如你选中的是standard面板中的TButton,然后在设计窗体上一点,就会在窗体上显示出一个Button来,
上边的都是大家都明白的费话,下边是的我问题:
当我们选中TButton后,在窗体上点击时,如果鼠标点在了TButton, TEdit之类的控件上,就会生成一个按钮,与你点中的Button或Edit并列(创建的Button的parent与你点中的Button/Edit的Parent是同一个),而如果点在panel,Groupbox,或Grid类的控件上时,就会在panel/Groupbox/Grid的上边(或者说里边)创建一个Button,也就是创建的Button的parent是panel/Groupbox/Grid.
这些好像也是些费话,大家天天用到的,那么我想知道,Delphi是根据什么判断出点中的控件是个适合当作"容器"的控件的?最近想搞个窗体设计器,突然发现我搞出来的Button可以在原来的Button上创建,嵌套式的Button,头大Parent是TWincontrol,理论上,TEdit, TButton, TPanel都可以当作Parent,并且都不会出错,问题是DelphiIDE是根据什么来区分可作窗口的Panel与"不可作容器"(虽然理论上作容器是没错的)的TEdit的呢谢谢

解决方案 »

  1.   

    可做容器的都是从TCustomControl 继承而来,你可以看下TButtonControl等和TCustomControl的区别就明白了
      

  2.   

    區別在ControlStyle —— csAcceptsControls
      

  3.   

    ControlStyle := ControlStyle + [csAcceptsControls, csNoDesignVisible];这个?
      

  4.   

    是啊,你可以繼承一個GroupBox,把csAcceptsControls去掉,然后放在form上,看看能否當容器...
      

  5.   

    没啥好说的,结贴
    多谢各位兄弟
    当当当当OnlyYou说出了问题原因,但风兄弟说的也有道理,你们就分分洗洗睡吧