c#:向comboBox添加新项

时间:2013-08-13 12:08:13

标签: c# winforms combobox

我希望将其IP地址的客户端列表添加到winforms中的comboBox,但该列表不会出现在comboBox中。

这是我的服务器代码

// 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属性时无法修改Items集合。”

5 个答案:

答案 0 :(得分: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]);
}

答案 1 :(得分:1)

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

comboBox1.Items.Add(str);

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

答案 2 :(得分: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的值。

答案 3 :(得分: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而不是对象。

我很好奇,你是否设法建立你的榜样?

答案 4 :(得分:0)

 combobox1.Items.Add("item1");
 combobox1.Items.Add("item2");

试试这个会起作用