当我用listbox1.items.delete(i)删除一行后,出现"list index out of bound(n)",n是一个整数,请问这是为什么,该

X

xy_c

Unregistered / Unconfirmed
GUEST, unregistred user!
当我用listbox1.items.delete(i)删除一行后,出现"list index out of bound(n)",n是一个整数,请问这是为什么,该如何解决?谢谢!(30分)<br />null
 
从后往前删除,或者……
法1:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := ListBox1.Items.Count - 1 downto 0 do
begin
ListBox1.Items.Delete(i);
end;
end;

法2:
while ListBox1.Items.Count &gt; 0 do
begin
ListBox1.Items.Delete(0);
end;
 
我是说当我删除其中任一行时,就出上面的错误。不是删除全部
 
先检查那一个 i 的存在

如果删除全部,就删除第一个就可以了
for I := 0 to List.Count - 1 do begin
List.Delete(0);
end;
 
i是不是大于listbox1.items.count呵!
數組越界了!
 
把代码帖出来把!
 

i越界,设个断点看看i的值是多少。
 
应该是i&gt;Listbox1.items.count所以出现了那错
 
同意 yzhshi 从最大的数字开始删
 
ListBox有一个MultiSelect属性,你把它设它True就可以了,
如果还不行的话,就你的代码有问题了
 
yzhshi的正确,这个问题我也遇到,也是这样解决。
 
删除前判断一下
if( i &lt; ListBox1.items.count ) then listbox1.items.delete(i);

i不能大等于count的值。
 
我有过类似经历,可能问题不出在这里,而是在listview中的change或其它事件中调用了listview的属性或内容,一旦作删除操作,当前值则变为空,
只需在该事件中写入一个条件判断即可,例:
procedure Tright.ListView1Change(Sender: TObject; Item: TListItem;
Change: TItemChange);
begin
if listview1.Selected&lt;&gt;nil then
StatusBar1.Panels[1].Text:=listview1.Selected.Caption;
end;
 
顶部