请问怎么根据控件的名字返回该控件(100分)

  • 主题发起人 主题发起人 yq97001
  • 开始时间 开始时间
Y

yq97001

Unregistered / Unconfirmed
GUEST, unregistred user!
我的问题是:如何用控件的名(String类型)变为控件类型,因为DELPHI没有宏替换功能,
所有有时很不方便
 


是不是要遍历所有的控件,找到名字和你的字符串名字相同的控件句柄。
我知道有方法可以遍历所有控件的。
 
遍历所有控件我知道,但如果控件太多的话,可能会影响速度
 
用FindComponent('控件名');
 
yq97001 :
只有遍历所有控件這種方法,很快的,這樣做根本不影響速度:
比如我要找一個'a'名字的的tedit控件
for i:=0 to self.componentcount-1 do
if self.components is Tedit then
if self.components.name='a' then
tedit(self.findcomponent('a')) //這樣可以找到該控件
delphi 運行這樣的循環太快了根本不影響速度
 
用FindComponent,小例子
**************************************************
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
const
NamePrefix = 'MyEdit';
begin
for i := 1 to 20 do
begin
TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
begin
Left := 10;
Top := i * 20;
Parent := self;
end;
end;
end;
 
procedure TForm1.FormDestroy(Sender:TObject);
var
tempBtn:TButton;
tempSpin:TSpinEdit;
begin
tempBtn:=TButton(Form1.FindComponent('Mybutton'));
tempBtn.Free;
tempSpin:=TSpinEdit(Form1.FindComponent('MySpin'));
tempSpin.Free;
end;
 
在網絡里面
設定登入方式設成是網絡登入肯定可以
 

to yq97001:
你可以findcomponent()函数去实现你的要求。
比如你有名为 edt1的控件,想根据它找到并使用该组件。
可以这样写:
var
TestEdit :TEDit;
........
testEdit :=Tedit(findcomponent(edt1);
.......
或者你可直接用form的component属性,在一个循环中进行遍历、判断。
如果该控件的类型等你的控件的类型,判断其name ,如果相等,就行了。
 
简单得很:
var
S: TComponent; //如果已知它是什么类型控件,直接定义为什么控件即可,如: S:TButton;
begin
S:=FindComponent('button2');
(S as TButton).caption:='find'; //如已知并已定义为某一类型控件,直接 S.Caption:='find' 即可。
end;
 
同意楼上的
 
同意大家的建议
 
后退
顶部