1

我希望将带有 IP 地址的客户端列表添加到 winforms 中的组合框,但该列表不会出现在组合框中。

这是我的服务器代码

// this my list of sockets for each client connected to server
list<Socket> astr = new list<socket>();
    public Form1()
    {
        InitializeComponent();
        addfg();
        comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
    }

public void addfg() 
{
  foreach (Socket s in astr) 
  {
    string str = string.Format("client : " + s.RemoteEndPoint);
    comboBox1.Items.Add(new object[] {str})
  }
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   MessageBox.Show(comboBox1.Items[0]);
 }

但我收到错误“ArgumentException 未处理”或详细信息“设置 DataSource 属性时无法修改项目集合”。

4

5 回答 5

4

试试这样:

foreach (Socket s in astr) 
{
  string str = string.Format("client : " + s.RemoteEndPoint);
  comboBox1.Items.Add(str);
}

在您的版本中,您似乎正在尝试添加一个数组,但该Items.Add()方法仅添加一个项目。要添加多个项目,您可以使用AddRange(),但这看起来不像您的代码的情况。

小心这段代码:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   MessageBox.Show(comboBox1.Items[0]);
}

您应该检查是否选择了某些内容:

if (comboBox1.Items.SelectedIndex > -1) {
   MessageBox.Show(comboBox1.Items[0]);
}
于 2013-08-13T12:21:22.190 回答
1

Items.Add ()方法将一个对象作为参数。您正在尝试添加对象数组。像这样改变它:

comboBox1.Items.Add(str);

编辑:正如您(可能在表单设计器中)设置您需要删除此绑定的 DataSource 属性。

于 2013-08-13T12:22:36.613 回答
1

代替

  MessageBox.Show(comboBox1.Items[0]);

您可能想使用

MessageBox.Show(this.comboBox1.SelectedItem);

在这种情况下,消息框将显示所选项目。

而不是

comboBox1.Items.Add(new object[] {str})

您可以选择执行以下操作:

    comboBox1.Items.Add(str);

在这种情况下,添加字符串对象或:

comboBox1.Items.Add(new {Name = str})

现在你正在创建一个新的对象类型数组,并且你正在向它添加 str ,就像它应该是一个属性一样。此外,不需要使用 Object[]。我所做的是当添加一个对象时,我创建了一个匿名类型,该类型具有一个名为 Name 的属性,该属性将保存 Str 的值。

于 2013-08-13T12:26:10.693 回答
0

我认为这会导致您的问题:

string str = string.Format("client : " + s.RemoteEndPoint);

尝试使用:

string str = string.Format("client : " + ((IPEndPoint)s.RemoteEndPoint).Address.ToString());

查看此链接:http: //msdn.microsoft.com/en-us/library/system.net.sockets.socket.remoteendpoint.aspx

此外,您应该将项目作为字符串而不是对象数组添加到组合框中。在索引更改事件上,您应该将字符串传递给 MessageBox.Show 而不是对象。

我很好奇,你是否设法建立你的例子?

于 2013-08-13T12:44:52.510 回答
0
 combobox1.Items.Add("item1");
 combobox1.Items.Add("item2");

试试这个它会工作

于 2013-10-22T11:02:19.463 回答