var
  Clients : TList;
  Client : TSimpleClient; // 实例
//------------------------------------------------------------------------Client.ListLink := ListBox1.items.Count;//-------------------------------------------------------------------------
try
  Client := Pointer(AThread.Data);finally  Clients.Delete(Client.ListLink);  ListBox1.Items.Delete  (ListBox1.Items.IndexOf(Client.Name));  Client.Free;  AThread.Data := nil;
end;
为什么我老是不能完全把Clients中的元素删除完呢!?至少都会剩一个删不掉,多的也有好几个,好奇怪.

解决方案 »

  1.   

    这样删肯定删不完.
    ListBox1.items.Count>=1procedure Delete(Index: Integer) index是从0开似的.
    即第一个没能删除.要删空可以用Clients.clear
      

  2.   

    好象不是吧!我记得F1里面说的ListBox1.Items.Count 是从0开是的啊!!
      

  3.   

    Index是从0开始的,第一个是Items[0]
    Count表示数量,0表示没有,1就一个了...
      

  4.   

    我的另一段代码:
    Client.ListLnk := ListBox1.Itesm.Count;
    Clients.Add(Client);
    那具体点,应该怎么样才能按照指定的去删除呢?我不想从头开始一个一个的去删除.
    还有在TList中,第一个元素一定会放在0位置上吗?不能从1开始吗?
      

  5.   

    我刚才试了一下,发现个问题.
    Memo1.Lines.Add('Items Index:' + IntToStr(ListBox1.Items.Index));
    Memo1.Lines.Add('Items Count:' + IntToStr(ListBox1.Items.Count));
    当只有一个Items时候,结果是:Items Index:-1
                               Items Count:0当只有两个Items时候,结果是:Items Index:0
                               Items Count:1
                               .............
    依此类推.
      

  6.   

    多线程要同步啊,Clients: TThreadList;Clients.LockList();
    try
      ...add, remove, delete, etc.
    finally
      Clients.UnlockList();
    end;