一段用于释放动态生成报表控件的代码,编译通过,但运行时出现‘list index out of bound(2)’错误,请问怎么回事?(我只剩下最后50分了,请

W

whory

Unregistered / Unconfirmed
GUEST, unregistred user!
一段用于释放动态生成报表控件的代码,编译通过,但运行时出现‘list index out of bound(2)’错误,请问怎么回事?(我只剩下最后50分了,请各位大侠帮帮我吧)代码如下: (50分)<br />[?]procedure disposecontrols;
var i:integer;
begin
for i:=0 to form2.QRBand1.ControlCount-1 do //取消系统对控件的控制
form2.QRBand1.RemoveControl(form2.QRBand1.Controls);

for i:=1 to form2.QRChildBand1.ControlCount DO
form2.QRChildBand1.RemoveControl(form2.QRChildBand1.Controls);

for i:=1 to form2.QRSubDetail1.controlcount do
form2.QRSubDetail1.removecontrol(form2.QRSubDetail1.Controls[0]);
Query1.Close;
end;
 
释放控件会影响ControlCount的值。所以你的循环会出错。
改成这样试试。

procedure disposecontrols;
var
i:integer;
begin
i:= form2.QRBand1.ControlCount-1;
for i:=0 to i do //取消系统对控件的控制
form2.QRBand1.RemoveControl(form2.QRBand1.Controls[0]);

i := form2.QRChildBand1.ControlCount -1;
for i:=0 to i DO
form2.QRChildBand1.RemoveControl(form2.QRChildBand1.Controls[0]);

i := form2.QRSubDetail1.controlcount - 1;
for i:=0 to i do
form2.QRSubDetail1.removecontrol(form2.QRSubDetail1.Controls[0]);
Query1.Close;
end;
 
for i:=1 to form2.QRChildBand1.ControlCount DO
form2.QRChildBand1.RemoveControl(form2.QRChildBand1.Controls);
改为
for i:=0 to form2.QRChildBand1.ControlCount-1 DO
form2.QRChildBand1.RemoveControl(form2.QRChildBand1.Controls);

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
for i:=1 to form2.QRSubDetail1.controlcount do
form2.QRSubDetail1.removecontrol(form2.QRSubDetail1.Controls[0]);
改为
for i:=0 to form2.QRSubDetail1.controlcount-1 do
form2.QRSubDetail1.removecontrol(form2.QRSubDetail1.Controls);
 
我建议先将count赋值给一个变量,再用downto来执行循环,这样比较稳妥!
 
应该downto来释放。如果for i:=0 to count,架设count=4,会出现这种情况:
第一个释放完,没问题,这之后控件索引:0,1,2
第二个释放也没问题,这之后控件索引:0,1
第三个释放有问题:因为这时候component.count=2,控检索引只有0,1!!!
而你释放components[2],你释放一个不存在的控件!!!

delphi自己例子都是这样的:
(给我分吧,我不是乞丐,我可是做了事情才讨分的^_^,像卖艺人那样。)
var

I: Integer;
Temp: TComponent;
begin
for I := ComponentCount - 1 downto 0 do
begin
Temp := Components;
if not (Temp is TControl) then
begin
RemoveComponent(Temp);
DataModule2.InsertComponent(Temp);
end;
end;

end;
 
我先试试,请等等。。。。
 
成功了,谢谢各位!
 
顶部