0

我正在尝试从列表视图中选择一个项目,当我选择它时,它应该在文本框中显示每个项目。我可以选择并获取第一项,但是当我选择第二项时出现错误,

“参数超出范围异常未处理,InvalidArgument='0' 的值对 'index' 无效。”

我有下面的代码,请帮助我..

public partial class Form2 : Form
{
  List<Person> people = new List<Person>();
}

class Person
{
  public string Name{ get; set; }

  private void button2_Click(Object sender, EventArgs e)
  {
    Person p = new Person();
    p.Name = textBox1.Text;
    people.Add(p);
    listBox1.Items.Add(p.Name);
  }

  private void listView1_SelectedIndexChanged(object sender, EventArgs e)
  {
    textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
  }
}
4

4 回答 4

1
 private void listView1_SelectedIndexChanged(object sender, EventArgs e)
 {
   if(listView1.SelectedItems.Count > 0)
     textBox1.Text = people[listView1.SelectedItems[0].Index].Name;
 }
于 2012-11-09T22:09:12.000 回答
0

有一小段时间没有选择项目:就在第一个被取消选择之后和新的被选择之前。如果有一个项目被选中,你应该在你做任何你想做的事情之前检查你的代码。

于 2012-11-09T22:08:53.593 回答
0

我建议您只检查"Items"ListBox 对象属性中的数据并将其与"people"您拥有的变量进行比较。确保它们在触发"SelectedIndexChanged"事件时不同步。

希望能帮助到你

干杯

于 2012-11-09T22:10:28.613 回答
0

如果您想列出您的人员并删除列出人员,您需要执行以下操作:

- 添加到将返回Person.Name的Person函数ToString(),ListBox可以保留任何对象,但显示的文本是object.ToString()

public override string ToString() 
{
  return Name;
}

- 在按钮单击时,您必须将人员添加到 listView1,而不是人名:

private void button2_Click(object sender, EventArgs e)
{
    Person p = new Person();
    p.Name = textBox1.Text;

    people.Add(p);
    listBox1.Items.Add(p);
}

- 现在你可以得到你的人,因为 listView 现在保留Person,而不是String

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
  textBox1.Text = ((Person)listView1.SelectedItems[0]).Name;
}
于 2012-11-09T22:27:52.633 回答