我在用到tpage的时候,要求在每个页里动态生成一些组件,我原来用的是每次show时,创建,但发现这样,会重复创建,会一闪一闪的 
请问怎么可以判断一个组件的子组件已经存在,请给出详细用法
拜托,多谢对回答的表示感激,对UP的表示谢意,对路过的表示遗憾

解决方案 »

  1.   

    if assigned( button1) then
      showmessage('The Button already created');
      

  2.   

    是用TPageControl吧?
    用Tag来判断:
    begin
      if PageControl1.ActivePage.Tag = 1 then Exit;
      PageControl1.ActivePage.Tag := 1;
      ...
      创建组件
      ...
    end;
      

  3.   

    如果一个子组件已经存在那么他的parent属性应该等于他的父组件
      

  4.   

    楼上的,你的方法不适合我,而且如果一个组件没有创建,访问其父组件会出现异常sysu(死树)的不知道对不对,我机器上没有,在等会要是没人就结帖了
      

  5.   

    举个例子:
    if groupbox1.ContainsControl(button1)=true then "已经创建"
      

  6.   

    利用父组件的ContainsControl方法你试试
      

  7.   

    还有,你的事件不要写在SHOW事件中吧,你可以写在CREATE事件中,这样就不会有重复创建的事情出现了
      

  8.   

    Drate(书虫) 不行我那个是一个表格,每次数据源都不一样,我只声明了一个tdbgrid类,然后每次不同page展开,在其上新生成一个表格,然后改一下数据源就可以了其实如果不用多页面的话,问题很好解决,可给单位做的,不好乱改,求各位多多帮忙啊
      

  9.   

    用FindComponent()函数应该可以.procedure TForm1.TabSheet1Show(Sender: TObject);
    var
    MyButton: TButton;
    begin
      if TButton(FindComponent('MyButton1')).Caption<> 'MyButton' then
        begin
          MyButton:= TButton.Create(self);
          MyButton.Parent:= TabSheet1;
          MyButton.Name:= 'MyButton1';
          MyButton.Caption:= 'MyButton';
        end;
    end;
    不知道你是不是想要这样的效果?
      

  10.   

    楼上的,对不起,不是这种效果,这种我知道我用死树的法子了,因为页面有两种控件,不同时间创建,所以用hint和tag很方便多谢各位,结帖了