Учебник YouTube не может выбрать второй элемент в Listview (недопустимый аргумент)

#c# #visual-studio-2010 #visual-studio-2008

#c# #visual-studio-2010 #visual-studio-2008

Вопрос:

Я пытаюсь следовать и завершить этот учебник по адресной книге в учебнике по адресной книге YouTube

Но я столкнулся с проблемой, которую я не понимаю. Следуя дальше, я не могу найти разницу в коде. Поэтому я думаю, что это должен быть параметр свойства, который мне не хватает. Когда я тестирую заполнение списка, я могу выбрать первый элемент. Но когда я выбираю второй элемент, отладчик выдает ошибку

недопустимый аргумент = значение ‘0’ недопустимо для ‘index’

Может кто-нибудь сказать мне, почему возникает эта ошибка? Прослушивание видео звучит так, как будто 0 в коде указывает списку, что вы можете выбирать только один элемент за раз. К сожалению, я не смог понять, почему его код работает, а мой — нет.

 private void button3_Click(object sender, EventArgs e)
{
    person p = new person(); // creates new string array
    p.Name = textBox1.Text;  // name    
    p.StreetAddress= textBox3.Text; // address
    p.Email = textBox2.Text;  // email
    p.Birthday = dateTimePicker1.Value;  //birthday
    p.AdditionalNotes = textBox4.Text;  // any notes
    people.Add(p); // tells the the above data to be added to the people list.
    listView1.Items.Add(p.Name); // makes its show on the listview of the main box.
    textBox1.Text = "";
    textBox2.Text = "";
    textBox3.Text = "";
    textBox4.Text = "";
    dateTimePicker1.Value = DateTime.Now;

}

private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{

    textBox1.Text = people[listView1.SelectedItems[0].Index].Name; //Debugger points error here.
    textBox2.Text = people[listView1.SelectedItems[0].Index].Email;
    textBox3.Text = people[listView1.SelectedItems[0].Index].StreetAddress;
    textBox4.Text = people[listView1.SelectedItems[0].Index].AdditionalNotes;
    dateTimePicker1.Value = people[listView1.SelectedItems[0].Index].Birthday;
}


class person
{
    public string Name
    {
        get;
        set;
    }  ...
}
 

Ответ №1:

Мне удалось поговорить с создателем программы. Решение состоит в том, чтобы проверять и обрабатывать отсутствие выбора. Поэтому добавление оператора If решило проблему.

 private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (listView1.SelectedItems.Count == 0) return;  // This line added will solve the problem
    textBox1.Text = people[listView1.SelectedItems[0].Index].Name; 
    textBox2.Text = people[listView1.SelectedItems[0].Index].Email;
    textBox3.Text = people[listView1.SelectedItems[0].Index].StreetAddress;
    textBox4.Text = people[listView1.SelectedItems[0].Index].AdditionalNotes;
    dateTimePicker1.Value = people[listView1.SelectedItems[0].Index].Birthday;
}