Как получить индекс элемента listview по его тексту

#c# #forms #listview

#c# #формы #listview

Вопрос:

Я пытаюсь получить индекс элемента по его тексту в listview.

Например, у меня есть представление списка, которое содержит элементы: «item1», «item2» и т.д.

Я попытался получить индекс «item2» следующим образом:

 MessageBox.Show(listView1.Items.IndexOf("item2");
 

Но это не работает:

не удается преобразовать из int в string / не удается преобразовать из string в System.windows.forms.ListViewItem

Как я могу это исправить?

Комментарии:

1. Когда вы говорите, что это не работает, что вы имеете в виду? Вы получаете какую-либо ошибку? Неверен ли полученный вами индекс? Спасибо

2. Я получаю ошибки: не удается преобразовать из int в string / не удается преобразовать из string в System.windows.forms.ListViewItem

3. Пожалуйста, попробуйте использовать listView1.Items.IndexOf("item2").ToString() и дайте мне знать. Спасибо!

4. Спасибо за помощь .. но я все равно получаю: Ошибка 2 Аргумент 1: не удается преобразовать из ‘string’ в ‘System. Windows. Формы. ListViewItem’

Ответ №1:

ListView.Метод FindItemWithText делает то, что вы хотите:

 var item = listView1.FindItemWithText("item2");

if (item != null)
{
    MessageBox.Show(listView1.Items.IndexOf(item).ToString());
}
 

Ответ №2:

Пусть у нас есть a ListView , идентификатор которого равен listView1 . Чтобы мы получили элементы, которые находятся в этом представлении списка, мы должны использовать следующий код:

 listView1.Items
 

Какой тип listView1.Items ?

Тип listView1.Items is ListViewItemCollection .

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

Каков тип объектов, которые хранятся в этой коллекции listView1.Items ?

Тип объектов, которые хранятся в listView1.Items is ListViewItem .

Для получения дополнительной документации об этом классе, пожалуйста, посмотрите здесь.

Почему не MessageBox.Show(listView1.Items.IndexOf("item2"); работает *?

Причина, по которой вы получаете сообщение об ошибке, опубликованное в вашем комментарии, заключается в том, что вызываемый метод IndexOf принимает в качестве параметра объект типа ListViewItem , и вы передаете объект типа string в качестве параметра этому методу.

На самом деле, как вы можете видеть здесь, сигнатура вызываемого метода IndexOf следующая:

  public int IndexOf(
    ListViewItem item
)
 

Итак, чтобы получить индекс нужного элемента, вы должны перейти к методу с именем IndexOf a ListViewItem . По этой причине я предлагаю вам попробовать следующий код:

 // Select the first ListViewItem of items, whose Text is item2
ListViewItem item = listView1.Items
                             .Cast<ListViewItem>()
                             .FirstOrDefault(x=>x.Text=="item2");

MessageBox.Show(listView1.Items.IndexOf(item).ToString());
 

Комментарии:

1. Извините.. Вот что я получил Ошибка 2 Аргумент 1: невозможно преобразовать из ‘int’ в ‘string’

2. Вы правы, я виноват. Прошу прощения. Пожалуйста, попробуйте обновленный сейчас и дайте мне знать. Спасибо

3. Хорошо, пожалуйста, дайте мне несколько минут, чтобы выяснить, как мы можем это преодолеть. Спасибо

4. @user3379482 пожалуйста, попробуйте использовать обновленный код.