2012-11-09 170 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; 
}