2012-11-09 134 views
0

我想从列表视图中选择一个项目,并且它应该在文本框中显示每个项目,因为我选择它。我可以选择并获得第一个项目,但是当我选择第二个项目时出现错误,从C#中的listview中选择项目#

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

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

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; 
    } 
} 
+0

如果没有项目被选中,那么就什么也没有在SelectedItems [0],它会抛出参数超出范围异常 –

+1

您正在将项目添加到listBox1,但是然后您试图引用listView1的选定项目 –

回答

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

是的,我需要检查这个条件,现在它工作..谢谢你.. –

0

有很短的时间周期时,有没有选择的项目:第一个得到选择,而选择了新的前刚过。你应该检查你的代码,如果有一个项目选择之前,你做任何你想做的事情。

+0

谢谢,这就是我没有做的事情。 –

+0

现在,如果你只是标记该答案。 .. –

0

我建议你只检查是否已在ListBox对象的"Items"属性,并将其与你有"people"变量比较数据。确保它们在发射"SelectedIndexChanged"事件时不同步。

希望它可以帮助

干杯

,如果你想拥有你的名单者和删除列表
0

,你下一步需要做:

- 添加到个人功能的ToString()将返回Person.Name,列表框可​​以让任何对象,但显示的文字是object.ToString()

public override string ToString() 
{ 
    return Name; 
} 

-On按钮单击您必须添加人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控件保持现在,不字符串

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