procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
for i:=0 TO listbox1.items.count-1 do
 if listbox1.items[i]=edit1.text then
 begin
  listbox1.items.Delete(i);
 end
end;

解决方案 »

  1.   

    for i:=listbox1.items.count-1 downTO 0 do
     if listbox1.items[i]=edit1.text then
     begin
      listbox1.items.Delete(i);
     end
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
    for i:=0 TO listbox1.items.count-1 do
    begin
     if listbox1.items[i]=edit1.text then  listbox1.items.Delete(i);
    end;
      

  3.   

    原因是这样的.
    你DELETE掉一个ITEM后,后面的ITEM提上来填补空缺.
    如:你删除2,原来的就变成2了.
    所以到了i变到大了以后,后面的它会发现ITEM[i]找不到!
    原因帮你找到了,会解决了吧!
      

  4.   

    原因是这样的.
    你DELETE掉一个ITEM后,后面的ITEM提上来填补空缺.
    如:你删除2,原来的3就变成2了.
    所以到了i变到大了以后,后面的它会发现ITEM[i]找不到!
    原因帮你找到了,会解决了吧!
      

  5.   

    我试了你的代码,问题不在代码上,而在于你的listbox1,你检查一下
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i:integer;
    begin
    i :=0;while i<> listbox1.items.count  do begin
        if listbox1.items[i]=edit1.text then
            listbox1.items.Delete(i)
        else
            i:=i+1;
    end;
    end;
      

  7.   

    楼上的,写反了.
    应该在listbox1.items.Delete(i)
    后加一句i:=i-1;就行了!
      

  8.   

    对了,刚才没写全!
    你把listbox1.items.count  传给一个变量
    i:=i-1;之后,再把它也减1.
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var i,ItemCount:integer;
    begin
      ItemCount:=listbox1.items.count-1
    for i:=0 TO ItemCount do
     if listbox1.items[i]=edit1.text then
     begin
      listbox1.items.Delete(i);
      i:=i-1;
      ItemCount:=ItemCount-1;
     end
    end;
      

  10.   

    可以利用listbox1.indexofname()进行定位 在进行删除
      

  11.   

    其实这并不是因为数组从第几个下标开始的问题,下标为[0]的参数其实是一个返回值,我们不用给它赋值,但上面的问题我也有遇过,最后是我自己解觉的,兄弟们不妨试一下!
    在你给参数赋值的时候不要使用数组的下标,而直接使用StoredProc的ParamsByName()这个属性来给参数赋值,这样就不会引起上面的问题!
    大家可以试一下,如果有问题可以直接给我发邮件![email protected]