那位大虾晓得,500分送与(300分)

  • 主题发起人 主题发起人 D李
  • 开始时间 开始时间
D

D李

Unregistered / Unconfirmed
GUEST, unregistred user!
如何通过指定的name(string),在窗体中找到该控件,并返回它(TwinControl)
 
procedure TForm1.Button1Click(Sender: TObject);
begin
if Name('Button1') is TButton then
showmessage('ok');
end;

function TForm1.Name(temp: string): TWinControl;
begin
result:=form1.FindComponent(temp) as TWinControl;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
Temp: TComponent;
WControl: TWinControl;
begin
for I := ComponentCount - 1 downto 0 do
begin
Temp := Components;
if (Temp is TWinControl) then
begin
if Temp.Name = 'Edit1' then //你想指定的 name
begin
WControl := Temp as Twincontrol; //你想要的东西
//
end;
end;
end;
end;
 
同意楼上,用FindComponent
 
比较赞成l_x_yuan的意见
 
接受答案了.
 
MilkRoad和l_x_yuan的办法在大多数情况下管用,
但当所要找的控件的Owner不是Form1时就失效了.
可以改进一下:
function Find(Owner:TComponent; ComName:String):TComponent;
var
i:Integer;
begin
for i:=0 to Owner.ComponentCount-1 do begin
Result:=Owner.Components;
if Result.Name=ComName then exit;
Result:=Find(Result,ComName);
if Result<>nil then exit;
end;
Result:=nil;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Button:TButton;
begin
Button:=TButton.Create(Button1);//临时产生一个Button
Button.Name:='TestBtn';
if Find(Self,'TestBtn') is TWinControl //可以找到
then showMessage('ok');
if FindComponent('TestBtn')<>nil //这个找不到的
then ShowMessage('I find too.');
Button.Free;
end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部