for i:=0 to 27 do
        begin
          for j:=0 to self.ComponentCount -1 do
          begin
            if (i+1)=Components[j].Tag then
            begin
              ShowMessage(IntToStr(i));
              if (Components[j] is TRzEdit) then
              begin
                (Components[j] as TRzEdit).Text :=  '0';
               // (Components[j] as TRzEdit).Text :=AdoQuery_Limit.Fields[i].AsString ;              end;
源代码如上所述,我判断窗体上组建的tag值是否跟I+1相等,若相等,则读取对应数据集的值,每次我运行的时候,还没执行到showmessage语句,程序就报错了,报list index of bounds(6),这是为什么呢

解决方案 »

  1.   

    self.ComponentCount -1
    Components[j].Tag 为啥一个带self,而另一个不带尼,看情形,上面不应该带self
      

  2.   

    if (i+1)=,之外还有其他代码吗,错误就是越界了,调试看看哪里越界了
      

  3.   

    当使用了WITH DO语句时:
    你若要循环FORM下的元件要用SELF你若要循环WITH DO中控件下的元件时不用加SELF当在FORM下自执行时加SELF和不加SELF都一样可能是这几个情况出了问题
      

  4.   

    for外面是否用了with,加上self试试
      

  5.   

    大家都说对了,是加了WITH ,对象不对了,导致这个问题,结贴