比如
  for i:=0 to strings.count-1 do
  begin
    if strings[i]='-' then
        strSFile.Delete(i);
  end;
//删除元素后,再循环几次则i会越界。-
2
3
-
-
-比如这样子的TStringList,运行到第4还是第5个就会出现Bound越界了? 这种情况我在像ListView里,也是遍历整个到Count-1,又有删除时也会遇到。 怎么预防?? 我实在想不出办法。 即便过程中判断 i<count-1 都还是不行。
好像问题在于: i变量最值只会初始化一次,即最初的Count值,而不会在过程中随Count值而改变!
我要改用哪种方式来表示这段程序? (除了另外定义一个StringList外的办法)!除了另外用While循环外!
谢谢

解决方案 »

  1.   

    改为for i:=strings.count-1 downto 0 do
      

  2.   

    晕,你在循环中,使用strSFile.Delete(i);又想用FOR TO 
    细想一下,不是矛盾吗?
    所以这种情况一般用:FOR DOWNTO
      

  3.   

    发现自己真的很笨。。都不知道用DownTo,还改了个While,虽然行也觉得麻烦点谢谢上面的
      

  4.   

    其实downto为什么可以也是值得想想的哦,嘿嘿
    downto不影响正常的序列号
      

  5.   

    就算不用DownTO,处理Strings[i]也应该从后往前处理:
    strings[MaxIndex-i]  //MaxIndex为常数,最初时strings的元素个数