просмотр списка для брошенного исключения строки - PullRequest
1 голос
/ 30 ноября 2010

Что я имею в виду, я использую

string proj = listView2.SelectedItems[0].ToString();

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

InvalidArgument = Значение «0» недопустимо для «индекса».Имя параметра: индекс

Есть мысли?

    private void listView2_SelectedIndexChanged(object sender, EventArgs e)
    {
       string proj = listView2.SelectedItems[0].ToString();
    }

работает:

        string proj ="";
        ListView.SelectedListViewItemCollection lv2si =
        this.listView2.SelectedItems;

        foreach (ListViewItem item in lv2si)
        {
            proj = item.ToString();
        }

Ответы [ 3 ]

1 голос
/ 30 ноября 2010

Вы должны проверить, что значение индекса является действительным, прежде чем получить к нему доступ.

private void listView2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string proj;
    if (listView2.SelectedItems.Count > 0)
        proj = listView2.SelectedItems[0].ToString(); 
    else
        proj = string.Empty;
} 
1 голос
/ 30 ноября 2010

Событие SelectedIndexChanged возникает при каждом изменении свойства Selected ListViewItem. Это означает, что событие вызывается дважды : один раз, когда первый элемент отменяется, и второй раз, когда выбран элемент, на который вы щелкнули. Поскольку вы не проверяете, есть ли у SelectedItems какие-либо элементы, вы получаете исключение при первом возникновении события.

Как показывает @Jeffrey L Whitledge в своем ответе, вы можете использовать SelectedItems.Count, чтобы определить, выбраны ли какие-либо элементы.

1 голос
/ 30 ноября 2010

Что делать, если в списке нет элементов?Коллекция будет содержать ноль элементов, и будет выдано это исключение.

Вместо этого получите ListViewItemCollection и используйте foreach для его итерации.Как описано в примере MSDN: ListView.SelectedListViewItemCollection завтрак = this.ListView1.SelectedItems;

    double price = 0.0;
    foreach ( ListViewItem item in breakfast )
    {
        price += Double.Parse(item.SubItems[1].Text);
    }

http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selecteditems.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...