肯定是你的程序有问题,可能是Items计算有误。看看你的代码才知道问题。

解决方案 »

  1.   

    删除一个item的时候,如果接着处理listview那么需要注意两个问题,第一是ItemCount已经变了,记得更新自己的变量或循环的上下限,第二,如果删除的不是最后的一条纪录的话,那么该item以后的所得的item的itemindex已经变了.不能再用原来保存的itemindex来访问.如果你注意到了这粮店的话,应该就不会有out of index的错误了.
      

  2.   

    ListView_MemberList.Enabled:=false;
    case state of
         -1: begin
                  WriteLogFile(bstrUserName,'收到',bstrString,slavename+'离开课堂');
                  for i:=0 to ListView_MemberList.Items.Count-1 do begin
                      if i=ListView_MemberList.Items.Count then begin
                         break;
                      end;
                      if ListView_MemberList.Items[i].caption = slavename then begin
                         ListView_MemberList.Items[i].delete;
                         break;
                      end;
                  end;
                  Label_MemberCount.Caption:=inttostr(strtoint(Label_MemberCount.Caption)-1);
         end;
         0: begin
                 HaveAdded:=false;
                 for i:=0 to ListView_MemberList.Items.Count-1 do begin     //判断该用户是否已存在,有则恢复初始状态
                     if i=ListView_MemberList.Items.Count then begin
                        break;
                     end;
                     if ListView_MemberList.Items[i].caption = slavename then begin
                        HaveAdded:=true;
                        ListView_MemberList.Items[i].subitems[0]:=' ';
                        ListView_MemberList.Items[i].subitems[1]:=' ';
                        ListView_MemberList.Items[i].subitems[2]:=' ';
                        ListView_MemberList.Items[i].subitems[3]:=' ';
                        break;
                     end;
                 end;
                 try
                     if not HaveAdded then begin      //没有则添加该用户
                     WriteLogFile(bstrUserName,'收到',bstrString,slavename+'加入课堂');
                     NewItem:=ListView_MemberList.Items.Add;
                     NewItem.ImageIndex:=15;
                     NewItem.Caption:=slavename;
                     for i:=1 to 4 do begin
                         NewItem.SubItems.Add(' ');
                     end;  // end for
                     NewItem.SubItems.Add('-');
                     Label_MemberCount.Caption:=inttostr(strtoint(Label_MemberCount.Caption)+1);
                 end;
                 except         end;  // end try     end;     //  end ifend;                  .
                      .
                      .
      

  3.   

    这段代码是写在 ondatareceived 事件里面的 (netmeeting的控件), 这个是多线程的, 不知道是不是因为这个原因, (delphi的可视控件不是线程保护的) 是不是要通过 systranic (不太记得怎么写了)解决