#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 пожалуйста, попробуйте использовать обновленный код.