我在删除ListBox中的某一项数据时出现异常,提示“List index out of bound(100)”说是下标越界(100)了,程序如下,大家帮忙瞧瞧,//lbSource和lbTarget为ListBox
procedure TfrmEmport.FormCreate(Sender: TObject);
begin
data.dstSource.Open;
lbSource.Clear;
while not data.dstSource.Eof do
begin
lbSource.Items.Add(data.dstSource.FieldValues['bh']);
data.dstSource.Next;
end;
end;for i := 0 to (lbSource.Items.Count - 1) do
if lbSource.Selected[i] then
begin
lbTarget.Items.Add(lbSource.Items.Strings[i]);
lbSource.DeleteSelected;
end;
procedure TfrmEmport.FormCreate(Sender: TObject);
begin
data.dstSource.Open;
lbSource.Clear;
while not data.dstSource.Eof do
begin
lbSource.Items.Add(data.dstSource.FieldValues['bh']);
data.dstSource.Next;
end;
end;for i := 0 to (lbSource.Items.Count - 1) do
if lbSource.Selected[i] then
begin
lbTarget.Items.Add(lbSource.Items.Strings[i]);
lbSource.DeleteSelected;
end;
所以才会出现下标越界.
声明:
本人保证所提供的方法是所知的最好方法
解答问题纯属公益性质
所以请不要向我追问
如果有时间自会关注后续问题
分析:
执行TListBox.DeleteSelected()方法后已经减少了列表的元素
但for循环已经在第一次运行的时候就决定了循环次数
即,还是没有删除前的次数,所以回导致访问下标出界
问题:如何转移TListBox选中的项?
设计:Zswang
日期:2002-10-07
方案1:追加完再删除 //具清晰性
方案2:向前循环 //执行速度快//扩充性好//建议使用
附言:理解一下for循环为什么比while循环执行速度快!
//*)///////Begin No.1
for i := 0 to lbSource.Items.Count - 1 do
if lbSource.Selected[i] then
lbTarget.Items.Add(lbSource.Items.Strings[i]);
lbSource.DeleteSelected;
///////End No.1///////Begin No.2
for i := lbSource.Items.Count - 1 downto 0 do
if lbSource.Selected[i] then
begin
lbTarget.Items.Add(lbSource.Items.Strings[i]);
lbSource.Items.Delete(i);
end;
///////End No.2