2

FLECk.IWebSocketConnection のリストがあります

IWebSocketConnection.ConnectionInfo.ClientIpAddress プロパティを使用してリストボックスにこのリストを表示しようとしていますが、何か間違っているに違いありません

Sockets= new List<IWebSocketConnection>();
ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";

を使用してソケットに追加すると

Sockets.Add(socket);

データソースを再バインドする必要があります

ListBox1.DataSource=Sockets;
ListBox1.DisplayMember="ConnectionInfo.ClientIpAddress";

しかし、リスボックスの表示は、予想される IP 番号ではなく、「Fleck.WebSocketConnection」です。

明確にするために、接続の書き込み数がリストされています。間違った表示情報を取得しているだけです。ラベルを作成してそのテキストを

label1.Text =((IWebSocketConnection)SocketList.Items[0]).ConnectionInfo.ClientIpAddress;

IP番号が表示されます

ここで私が間違っていることを誰かに教えてもらえますか。

4

1 に答える 1

2

別のアプローチがあるかもしれませんが、できることの 1 つは、表示する必要があるリスト メンバーをフラット化し、それにバインドすることです。

例えば:

var SocketInfos = sockets.Select((s) => new {ClientIpAddress = s.ConnectionInfo.ClientIpAddress,
                                             Socket = s}).ToList();

ListBox1.DataSource=SocketInfos ;
ListBox1.DisplayMember="ClientIpAddress";

ただし、ソース リストを変更するたびに、リストを再生成する必要があります。

このようにして、選択した ListBox アイテムから選択したソケット インスタンスに戻ることができます。

于 2012-08-09T13:14:04.010 に答える