读书人

DELPHI反射?该如何处理

发布时间: 2012-03-14 12:01:12 作者: rapoo

DELPHI反射?
form上有25个EDIT控件,命名如下:

edit11....edit15
...
edit51....edit55

如何设置edit[i]1...edit[i]5的值?i是程序中生成的

[解决办法]
笨的方法,case,if判断。
[解决办法]
procedure TForm1.Button1Click(Sender: TObject);
var
C : Char;
P : Pointer;
I : Char;
begin
C := '5 ';
for I := '1 ' to '5 ' do
begin
P := FieldAddress( 'Edit '+C+I);
if P <> nil then TEdit(P^).Text := 'OK ';
end;
end;
[解决办法]
TEdit(FindComponent( 'Edit ' + IntToStr(i) + '1 ')).Text := 'TEXT ';
[解决办法]
Delphi不支持反射
可以用RTTI来实现这个类似的效果

具体是用RegisterClasses和GetClass这两个函数
[解决办法]
补充一下sdzeng(大头鸟),要加上{M+}开关
[解决办法]
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:=0 to ComponentCount -1 do
begin
if Components[i] is TEdit then
TEdit(Components[i]).Text := 'Csdn BBS ';
end;
end;
[解决办法]
Delphi不支持反射,不象JAVA那样

但可以通过循环检查Edit所在容器的控件个数,再判断是否TEdit后付值,但要注意控件的摆放顺序

还有可以考虑利用一下控件的属性
[解决办法]
还有可以考虑利用一下控件的Tag属性
[解决办法]
用控件数组就可以了

读书人网 >.NET

热点推荐