Двойной щелчок элемента в ListView

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

Мой код до сих пор:

private void listView_MouseDoubleClick(object sender, MouseEventArgs e)
{
    MessageBox.Show(songList.SelectedItems[2].ToString());
}

Тем не менее, он возвращает сообщение об ошибке «InvalidArgument = значение« 2 »недопустимо для« индекса ». Имя параметра: индекс»


person Andrew S.    schedule 09.09.2011    source источник


Ответы (4)


Вы можете попробовать:

if (songList.SelectedItems.Count > 0) 
{
    ListViewItem item = songList.SelectedItems[0];
    string s_you_want = item.SubItems[1].Text;
}

Взяв ListViewItem, вы можете получить значения столбцов, используя свойство SubItems[].

person Marco    schedule 09.09.2011

Я думаю, что вы должны привязать не свой listView к событию doubleClick, а listViewItem. отправитель будет иметь DataContext, из которого вы можете получить свой третий столбец.

person stukselbax    schedule 09.09.2011

Как вы заполняете ListView? Не зная этого, трудно помочь. Может быть, вы могли бы попробовать это:

Установите точку останова в этой строке:

MessageBox.Show(songList.SelectedItems[2].ToString());  

Как только отладчик достигнет точки останова, вы можете выбрать songList и нажать Shift-F9.
Теперь вы можете изучить songList и проверить, как получить строку третьего столбца.

person WaltiD    schedule 09.09.2011
comment
songList.SelectedItems[2].ToString() показывает вам ListViewItem или что-то подобное: если вы не переопределили метод ToString(), поведение по умолчанию возвращает имя класса... - person Marco; 09.09.2011
comment
@Марко: Да, я знаю. Вот почему я подумал, что было бы неплохо исследовать songList через окно QuickWatch-Window VisualStudio. - person WaltiD; 09.09.2011

SelectedItems возвращает SelectedListViewItemCollection, и с помощью индексатора вы получаете доступ к элементам в этой коллекции, то есть к ListViewItems, а не к столбцам. это означает, что если у вас выбрана одна строка, коллекция содержит только один элемент, и попытка доступа к третьему приводит к ошибке.

Попробуйте (отредактируйте в соответствии с комментарием Марко):

songList.SelectedItems[0].SubItems[1].Text
person Francesco Baruchelli    schedule 09.09.2011
comment
Итак, у вас есть идеи, как мне получить третий элемент из выбранной строки? Я довольно новичок в этом. - person Andrew S.; 09.09.2011
comment
Если я хорошо помню, вы должны взять SubItems[1], чтобы взять третий столбец. На самом деле первый берется как Text, а другие берутся со свойством SubItems[] с индексом, начинающимся с 0. - person Marco; 09.09.2011