如何访问动态创建的控件的属性(100分)

  • 主题发起人 主题发起人 lliu
  • 开始时间 开始时间
L

lliu

Unregistered / Unconfirmed
GUEST, unregistred user!
我定义了几个数组:
var
imagearray:array[1..20] of Timage;
labelarray:array[1..20] of Tlabel;
formarray:array[1..20] of Tform;
timerarray:array[1..20] of Ttimer;
然后在一个buttonclick事件中动态创建form,form中放置
动态创建的imagearray,labelarray,timerarray;
程序段如下:
procedure TForm1.buttonClick(Sender: TObject);
var
string1:string;
begin
str(indeximage,string1);
formarray[indeximage]:=Tform.create(self);
formarray[indeximage].parent:=self;
formarray[indeximage].caption:=string1;
formarray[indeximage].show;
imagearray[indeximage]:=Timage.create(self);
imagearray[indeximage].parent:=formarray[indeximage];
imagearray[indeximage].picture.loadfromfile('d:/picture/comm.bmp');
imagearray[indeximage].left:=imagearray[indeximage].left+indeximage*20;
labelarray[indeximage]:=Tlabel.create(self);
labelarray[indeximage].parent:=formarray[indeximage];
labelarray[indeximage].caption:=string1;
labelarray[indeximage].left:=imagearray[indeximage].left;
labelarray[indeximage].top:=imagearray[indeximage].top+30;
timerarray[indeximage]:=Ttimer.create(self);
timerarray[indeximage].interval:=1000;
timerarray[indeximage].ontimer:=mytime;
timerarray[indeximage].enabled:=true;
indeximage:=indeximage+1;
end;
其中mytime为自定义的一个过程:
procedure Tform1.mytime(sender:Tobject);
begin
imagearray[indeximage].picture.loadfromfile('c:/my documents/cellv0.bmp');
end;
上述程序在到imagearray[indeximage].picture.loadfromfile('c:/my documents/cellv0.bmp');
时出现错误,错误提示:无法访问imagearray[indeximage].picture.loadfromfile();
(注:indeximage是一个全局变量;)
我想请教以下,我如何才能访问动态创建的控件的属性?
谢谢!
 
前面还要
imagearray[indeximage].picture:=TPicture.Create;
 
不用,
注意indeximage的值。
 
amo说的对.
你的程序看起来这么多,但错误很明显.
既然你的indeximage是一个全局变量,那个在动态生成完那一大串东西之后,
你把它加一了,这加1之后的indeximage是没有任何控件的所以和他对应的,
所以在timer事件里的那个indeximage实际上是加1之后的indeximage,
当然无法访问了!

你应该在动态创建之前给indeximage加1, 这样indeximage始终指向最后创建
的控件索引.
 
做一个NewForm类继承TForm,
把这些东西全放上,然后在NewForm.Create(IndexImage,String1,FCaption)
中赋值.
var
FormArr:array [1..20] of TNewForm;

FormArr[IndexImage]:=TNewForm.Create(IndexImage, String1, 'Captions');
 
在所有要用的对象或指针前使用assigned(yourobject)
或者 yourobject<>nil 可保证你的程序不会出错,
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
775
import
I
后退
顶部