我希望将其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集合。”
答案 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");
试试这个会起作用