如何可以通過一個控件的名稱(string)來反回該控件的實體(tcompontent)???(100分)

  • 主题发起人 主题发起人 kouchun
  • 开始时间 开始时间
K

kouchun

Unregistered / Unconfirmed
GUEST, unregistred user!
如下:
for i:=1 to 10 do
begin
name:= 'abc' + intToStr(i);
Tpanel(name).color:= clbule
//該語法是不成立的,但是我所希望的功能...
Tpanel(name).enable:= True
//該語法是不成立的,但是我所希望的功能...
end

Tpanel(name).color 的name必需要是tcompontent類型才行,但我的name是string類型
我知道可以用遍歷compontent的方法去做, 但運行起來很慢 , 有沒有其他好方法???
 
for i:=0 to TForm(Sender).ComponentCount-1 do
begin
if TPanel(TForm(Sender).Components).Name:=name then
begin
TPanel(TForm(Sender).Components).color:=clbule;
Tpanel(TForm(Sender).Components).enable:= True;
end;
end;
 
FindComponent()
 
Findcomponent函数的原理很简单,就是循环遍历!
下面是delphi中的源码!
function TComponent.FindComponent(const AName: string): TComponent;
var
I: Integer;
begin
if (AName<>'') and (FComponents<>nil) then
for I := 0 to FComponents.Count - 1 do
begin
Result := FComponents;
if SameText(Result.FName, AName) then Exit;
end;
Result := nil;
end;
 
我提供一个函数给你,刚好符合:
function b_findclass(classname:string):TObject;
var
C : TFormClass;
SomeObject: TObject;
begin
C := TFormClass(FindClass(ClassName));
SomeObject := C.Create(nil);
Result := SomeObject;
end;

调用
xxx:=b_findclass('Tedit'),就是你的edit了,给分


但是如果你的form当中没有这些控件,你必须注册,注册如下:
initialization
begin
RegisterClasses([Tedit,Tbutton,Tlabel,Tpanel,TListBox,TbitBtn,Tshape]);
end;


http://www.delphibbs.com/delphibbs/dispq.asp?lid=2249030
 
后退
顶部