查找Panel中的动态控件并销毁方法(100)

  • 主题发起人 主题发起人 bluetearsly
  • 开始时间 开始时间
B

bluetearsly

Unregistered / Unconfirmed
GUEST, unregistred user!
if FindComponent('Name') <> nil then //查找为Nama的控件begin TLabel(FindComponent('Name')).Destroy; FindComponent('Name')):=nil[red];//这里要报错,要自动样处理????[/red]end;
 
if FindComponent('Name') <> nil then //查找为Nama的控件begin FindComponent('Name').Destroy; // FindComponent('Name')):=nil; 不需要这行end;
 
谢谢你的答案// FindComponent('Name')):=nil; 不需要这行但是如果不需要这行的话我第一次Destroy后,再一次Destroy时他也能找到相同名字的'Name',就会出错.
 
不知道你用的delphi是什么版本,我用D7.对于设计期的Label1和运行期动态创建的Label,我都测试了,释放后,再次运行这段代码,就找不到了该控件了。
 
我用的不是Label,用的是TRxGIFAniMator ,但用法应该都一样的.第一次destroy 后再运行一次后FindComponent('Name') 又能找到.所以程序又执行一次destroy 所以又的报错了.
 
if FindComponent('Name') <> nil then //查找为Nama的控件begin FreeAndNil(Application.FindComponent('Name'));end;
 
或者if FindComponent('Name') <> nil then //查找为Nama的控件begin FindComponent('Name').free;end;
 
FindComponent('Name').free;不行,我用了Free以后再去查找这个'Name'值,一直都还在.所以并没有销毁掉.只能用类似FindComponent('Name'):=nil方法可能才行.
 
FreeAndNil试过吗?
 
估计那个控件有问题。这样写:procedure TForm1.Button2Click(Sender: TObject);var t:TComponent;begin t:= FindComponent('Label2'); if t <> nil then //查找为Nama的控件 begin t.Owner.RemoveComponent( t ); t.Free; end;end;
 
"znxia"说对了,这样就没有问题了.谢谢 !!!
 
znxia 正解procedure TForm1.btn1Click(Sender: TObject);var Lbl: TLabel;begin // 注意这里 Lbl 的 Owner 一定要为 pnl1, 否则找不到 Lbl := TLabel.Create(pnl1); Lbl.Name := 'Lbl1'; Lbl.Caption := 'aaa'; Lbl.Parent := pnl1;end;procedure TForm1.btn2Click(Sender: TObject);begin pnl1.FindComponent('Lbl1').Free;end;
 
后退
顶部