使用完Component组件后,怎样销毁?

解决方案 »

  1.   

    YourComponent.Free;或者啥都不要做。在缺省的模式下,按照Anders的设计,是不需要手工释放的,Delphi会替你干得。
      

  2.   

    Free试过了,不行!
    Destory也不行呀!
      

  3.   

    先说说你是怎么创建的吧,然后才能帮你分析FREE
      

  4.   

    var
    frmComponent:TComponent;
    begin
      for .....
       begin
         .......
       end;
      frmComponent.Free;
    end
    是这样吗?可组件不能被销毁,运行时有错误提示呀!
    [waring] unit9.pas(555):variable'frmComponent'might not have been initialized
      

  5.   

    好象你没有创建对象吧
    var
    frmComponent:TComponent;
    begin
      frmComponent:=TComponent.create(可能有参数);//可能你少了这一行
      for .....
       begin
         .......
       end;
      frmComponent.Free;
    end
      

  6.   

    为何Label可以正常的显示出来。Edit控件却不可以,运行时程序会中止。这是什么原因?
    (窗体上月30个Edit和Lable控件,均为隐藏。根据表中的记录内容从一开始显示Lable和Edit,输入数据后把Edit中的内容保存到表中。)procedure TForm9.FormShow(Sender: TObject);
    var
      ADOQadd:TADOQuery;
      ADOgwgz:TADOQuery;
      frmComponent:TComponent;
      frmComponent_Edit:TComponent;
      i:integer;
    begin
      ADOQadd:=TADOQuery.Create(self);
      ADOgwgz:=TADOQuery.Create(self);
      frmComponent:=TComponent.Create(self);
      frmComponent_Edit:=TComponent.Create(self);
      ADOgwgz.Connection:=MainForm.ADOConnection1;
      ADOQadd.Connection:=MainForm.ADOConnection1;
      ADOQadd.Active:=False;
      ADOQadd.SQL.Clear;
      ADOQadd.SQL.Add('select * from '+TableName_rec+';');
      ADOQadd.Prepared;
      ADOQadd.Active:=True;
      ADOQadd.Open;
      ADOQadd.First;
      E_Count:=ADOQadd.RecordCount -1;
      for i:=0 to E_Count do
        begin
          frmComponent_Edit:= Components[i];
          frmComponent:= Components[i];
          if frmComponent_Edit is TEdit then
            begin
              (frmComponent_Edit as TEdit).Visible:=True;
              (frmComponent_Edit as TEdit).Hint:=Trim(ADOQadd.FieldValues['account_colum'])+':';
              IF Trim(ADOQadd.FieldValues['account_colum'])='gwgz' Then
                Begin
                  With ADOgwgz Do
                    Begin
                     SQL.Clear;
                     SQL.Add('Select post_level.level_money From post_level,worker');
                     SQL.Add(' Where worker.work_id="'+Temp_id+'" and post_level.post_class=worker.work_post');
                     SQL.Add(' And post_level.level_class=worker.work_level;');
                     Prepared;
                     Open;
                    End;
                  IF ADOgwgz.RecordCount > 0 Then
                    (frmComponent_Edit as TEdit).Text:=ADOgwgz.FieldValues['level_money']
                  Else
                    (frmComponent_Edit as TEdit).Text:='0.00';
                  ADOgwgz.Close;
                End
              Else
              (frmComponent_Edit as TEdit).Text:='0.00';
            End;
              if frmComponent is TLabel then
                begin
                 (frmComponent as TLabel).Visible:=True;
                 (frmComponent as TLabel).Caption:=Trim(ADOQadd.FieldValues['account_hz'])+':';
                end;
            ADOQadd.Next;
         End;
      frmComponent.Free;
      frmComponent_Edit.Free;
    end;