list out of bounds(n)?????????????????(100分)

  • 主题发起人 主题发起人 sallygirl
  • 开始时间 开始时间
S

sallygirl

Unregistered / Unconfirmed
GUEST, unregistred user!
程序开始运行时不管listbox中有多少条都没问题,
只是在用过该界面后,又回到该界面,执行某一按钮
的程序时就一定会出现这个问题。我在程序里用的是
for i:=0 to listbox.items(i) do 根本不可能有记
录条数统计错误的问题。请大家帮帮忙。
 
listbox.items(i) 不是整形
 
是否在onActive或者onShow里面写了事件?
查看一下你的ListBox.Items.Count,看记录数目是否变化?
for i:=0 to listbox.items(i) do i是什么?好像你这句话本身就编译不过去呀。
 
数组越界。
假设你要取ListBox的前10条记录,就应该
var
rec: Integer;
begin
rec := 10;
for i:=0 to rec-1 do //注意,由于是从0开始的,所以到9就是10个了,到10就越界了
...
end;
 
for i:=0 to listbox.items(i) do
这样也能用么?好像不行吧?
 
我写错了,我在程序中使用的是for i:=0 to listbox2.items.count-1 do
问题在于第一次执行程序时没甚么问题,当我不关闭程序,重新回到这个界面,
刷新listbox,然后再执行程序就出现这个问题了。listbox刷新是没问题的,
我在程序里也只用for i:=0 to listbox2.items.count - 1 do
listbox2.items(i),不知道怎么回事
 
如果你的程序真的没有问题的话,有可能是delphi对for的优化造成的,delphi是将
i := listbox2.items.count-1 然后每次减一。如果listbox2进行过更改,count值
发生变化,而i还是原来的值,就会出现越界错误。这种情况下,改用while循环可能
就可以了。
 
用逐步调试看一下。我估计是你写或刷新ListBox时没有用洽当的事件,比如说你把代码写
在窗体的OnCreate事件而不是OnShow事件当时,这样才会出现当程序第一次运行时正常,
而第二次打开窗体就出问题的情况。
 
你改成:for i:=listbox2.items.count - 1 downto 0 do 试试!
 
谢谢各位大哥的帮忙,好像还是不行,在关闭另一个窗口可该窗口的onshow事件里,我都加上了
listbox.item.clear,然后在程序中我一直都用for i:=0 to listbox2.items.count-1 do
listbox1.items(i);是不可能读错行数的。
 
for i:=0 to listbox2.items.count-1 do
listbox1.items(i);
是不是犯了低级错误?
对listbox2的count做循环,却访问listbox1的元素!!!
 
各位大哥,我承认我比较马虎,主要是问题总没有得到解决,所以总写错,
我还没那么低级,大家饶了我吧,
 
begin
if freport.titleband1.controlcount >0 then
for i:=0 to freport.titleband1.controlcount-1 do
freport.titleband1.removecontrol(freport.titleband1.controls);
if freport.columnheaderband1.controlcount>0 then
for i:=0 to freport.columnheaderband1.controlcount-1 do
freport.columnheaderband1.removecontrol(freport.columnheaderband1.controls);
if freport.detailband1.controlcount>0 then
for i:=0 to freport.detailband1.controlcount-1 do
freport.detailband1.removecontrol(freport.detailband1.controls);
end;

我又测试了一下,问题好像出现在上面的程序中,就是将自动生成的报表的控件去除,
在重复执行时就会出错
 
多人接受答案了。
 
我也遇到这个问题,请问sallygirl如何解决的,不胜感谢
 
后退
顶部