0

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

尽管我的英语不好,我还是会尝试解释一下:我所需要的只是从列表视图中删除一个项目,以便客户端套接字断开连接。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 项目不会删除。

4

2 回答 2

1

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

于 2013-10-17T14:55:54.800 回答
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;

它的工作原理,只是不确定我是否做对了。谢谢大家。

于 2013-10-17T19:04:34.610 回答