Delphi 7 - 如何在客户端套接字断开连接时删除Listview项标题

时间:2013-10-17 14:51:40

标签: delphi delphi-7

当客户端套接字从服务器套接字断开连接时,我很想从列表视图中删除项标题。在我的代码中,当客户端连接到服务器时,listview添加一个图标和一个标题(client.hostname),但是如何在客户端断开连接时删除该项? Listview1.items.delete.caption(socket.host)。有什么帮助吗?

尽管我的英语不好,我会尽力解释:我只需要从listview中删除一个项目,以便客户端套接字断开连接。 Ken White先生给了我一个几乎完全相同的问题的解决方案但是我无法在几个客户端连接到服务器的情况下适应它,即,如何删除属于刚刚断开连接的主机的listview标题?

我的serversocket1代码:(我将serversocket1重命名为socket1)

procedure TForm1.socket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin

ListView1.AddItem(Socket.RemoteHost, socket);
end;

我在客户端断开连接时尝试删除项目的代码:

procedure TForm1.socket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
L : TListItem;
begin
L:=listview1.FindCaption(0,inttostr(socket.Handle),false,true,false);
if L<>nil then 
L.Delete;
end;

但是listview项目不会删除。

2 个答案:

答案 0 :(得分:1)

首先需要找到添加项的索引,即Listview1.items.IndexOf(socket.host),然后删除该特定索引处的项。

答案 1 :(得分:1)

我更改了代码:

procedure TForm1.socket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
L : TListItem;
begin
L:=listview1.FindCaption(0,inttostr(socket.Handle),false,true,false);
if L<>nil then 
L.Delete;
end;

到此:

procedure TForm1.socket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
var
L : TListItem;
begin
L:=listview1.FindCaption(0,socket.remotehost,false,true,false); // <--changed this line socket.remotehost

if L<>nil then 
begin
L.Delete;
end;
end;

这是有效的,只是不确定我是否采取了正确的方式。谢谢大家。