С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12
.NET 4.x

Получение элемента из ListView

10.07.2014, 10:07. Показов 1796. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Появилась проблема с получение элемента из listview.
И так, начну с того, как у меня заносятся элементы в этот listview

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
Public Sub loaddata()
 
        MainList.BeginUpdate()
        For i As Integer = 0 To My.Settings.Site.Count - 1
            MainList.Items.Add(My.Settings.Site(i))
            MainList.Items(i).SubItems.Add(My.Settings.Login(i))
            MainList.Items(i).SubItems.Add(My.Settings.Pass(i))
        Next i
        MainList.EndUpdate()
        MainList.Refresh()
 
    End Sub
My.Settings.Site, Login, Pass - параметры в приложении = System.Collections.Specializied.StringCo llection

А вот собственно как получает определенный элемент из ListView.

VB.NET
1
2
3
4
5
ShowForm.Text = "Подробности для " & My.Settings.Site(MainList.SelectedItems(0).Index)
        ShowForm.txtSiteShow.Text = My.Settings.Site(MainList.SelectedItems(0).Index)
        ShowForm.txtLogShow.Text = My.Settings.Login(MainList.SelectedItems(0).Index)
        ShowForm.txtPassShow.Text = My.Settings.Pass(MainList.SelectedItems(0).Index)
        ShowForm.ShowDialog()
Да, всё это конечно работает, но в программе присутствует сортировка, и из-за неё неправильно получаются элементы из ListView.
Способ сортировки взят отсюда.

Например, существует элемент с индексом = 0, если при запуске программы, без сортировки, получить все данные этого элемента, мы получим всё правильно, но если отсортировать все элементы в ListView, то тот элемент, которые имел индекс 0, и стоят на 1 месте в списке, переместится, например, на 3 позицию, и его место займет другой элемент, при этом у элемента, который имел индекс 0, его индекс станет равным 2 (так как он находится на 3 позиции), а тот элемент, который стал 1 в списке, получает индекс = 0, но при попытке получить данные элемента с индексом 0 (уже другой элемент), программа выдает данные элемента, который был здесь ранее (теперь он на 3 позиции). Не знаю, правильно ли объяснил свою проблему, в общем, такие дела.

Если кто знает, в чём может быть проблема, как это можно решить - посоветуйте, потому что я не знаю, что делать.
Или стоит делать это всё без сортировки, либо же использовать другой способ (кстати говоря, было опробовано несколько вариантов сортировки, которые были найдены на просторах интернета, а точнее, на сайте микрософта).

Если чего-то не хватает, какой-то части кода, что и как там в программе расположено - пишите.

Заранее, огромная благодарность за помощь.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.07.2014, 10:07
Ответы с готовыми решениями:

Получение значения выделенного элемента ListView
На форме есть ListView (LV1) и есть RichTextBox (Crit). Нужно по Click-у на элементе списка, его текстовое содержимое отправить в...

Получение элемента listView в AlertDialog
Добрый день форумчане, подскажите как реализовать следующее событие. Имеется listview, который состоит из нескольких компонентов (3...

Listview, adapter получение информации из нажатого элемента списка
Есть список, который заполняется из базы данных. Мне нужно через контекстное меню удалить этот элемент из списка и исходя из информации,...

8
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
10.07.2014, 11:34
попробуй при добавлении ListViewItem в ListView, в параметре Tag записать индекс. Например вот так
VB.NET
1
2
3
4
5
6
7
8
9
10
11
For i As Integer = 0 To My.Settings.Site.Count - 1
            Dim item As New ListViewItem
            With item
                .Text = My.Settings.Site(i)
                .Tag = i ' записываем сюда индекс
                With .SubItems
                    .Add(My.Settings.Login(i))
                    .Add(My.Settings.Pass(i))
                End With
            End With
Next
а что бы получить сделаем вот так
VB.NET
1
2
3
4
5
6
7
8
'получаем элемент под индексом 8 например
        Dim ItemSelect As ListViewItem = Nothing
        For Each item In MainList
            If item.Tag = 8 Then
                ItemSelect = item
                Exit For
            End If
Next
0
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12
10.07.2014, 11:47  [ТС]
Хм, этот метод добавления отказывается работать, в ListView пусто.
0
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
10.07.2014, 15:04
Лучший ответ Сообщение было отмечено quatromad как решение

Решение

ошибся двумя строчками
1.
VB.NET
1
For Each item In MainList.Items
2.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
For i As Integer = 0 To My.Settings.Site.Count - 1
            Dim item As New ListViewItem
            With item
                .Text = My.Settings.Site(i)
                .Tag = i ' записываем сюда индекс
                With .SubItems
                    .Add(My.Settings.Login(i))
                    .Add(My.Settings.Pass(i))
                End With
            End With
            MainList.Items.Add(item)
Next
1
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
10.07.2014, 15:28
Лучший ответ Сообщение было отмечено quatromad как решение

Решение

VB.NET
1
2
3
4
5
6
7
    With MainList.SelectedItems(0).SubItems
        ShowForm.Text = "Подробности для " & .Item(0).Text
        ShowForm.txtSiteShow.Text = .Item(0).Text
        ShowForm.txtLogShow.Text = .Item(1).Text
        ShowForm.txtPassShow.Text = .Item(2).Text
    End With
    ShowForm.ShowDialog()
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12
10.07.2014, 16:59  [ТС]
Спасибо вам, уважаемые, общими усилиями всё работает правильно, по крайней мере потыкал сейчас, ничего не заметил, всё работает идеально)
Комраду Nord790 спасибо за эту часть кода
VB.NET
1
2
3
4
5
6
7
8
9
10
11
For i As Integer = 0 To My.Settings.Site.Count - 1
            Dim item As New ListViewItem
            With item
                .Text = My.Settings.Site(i)
                .Tag = i ' записываем сюда индекс
                With .SubItems
                    .Add(My.Settings.Login(i))
                    .Add(My.Settings.Pass(i))
                End With
            End With
Next
А комраду Step_UA спасибо за эту часть кода
VB.NET
1
2
3
4
5
6
7
With MainList.SelectedItems(0).SubItems
        ShowForm.Text = "Подробности для " & .Item(0).Text
        ShowForm.txtSiteShow.Text = .Item(0).Text
        ShowForm.txtLogShow.Text = .Item(1).Text
        ShowForm.txtPassShow.Text = .Item(2).Text
    End With
    ShowForm.ShowDialog()
Спасибо вам огромное, побольше таких людей !

Добавлено через 57 минут
Эм, хорошо, получать данные получается, а вот как их сохранять, так как в программе существует кнопочка редактировать запись...

VB.NET
1
2
3
4
5
6
7
8
9
 PassManager.MainList.SelectedItems(0).SubItems.Item(0).Text = txtSiteShow.Text
        PassManager.MainList.SelectedItems(0).SubItems.Item(1).Text = txtLogShow.Text
        PassManager.MainList.SelectedItems(0).SubItems.Item(2).Text = txtPassShow.Text
        My.Settings.Save()
 
        PassManager.MainList.Items.Clear()
        PassManager.loaddata()
        hidebuttons()
        Me.Close()
Я знаю, этот код сохраняет данные именно в ListView, но при загрузке формы происходит загрузка из переменных программы, а эти переменные не меняются....

Кто что думает по этому поводу ?
0
 Аватар для Step_UA
1591 / 664 / 225
Регистрация: 09.06.2011
Сообщений: 1,334
10.07.2014, 17:12
Цитата Сообщение от quatromad Посмотреть сообщение
при загрузке формы происходит загрузка из переменных программы, а эти переменные не меняются....
Вы сами ответили на свой вопрос - нужно сохранять ))
1 вариант - сразу сохранять, используя индекс из Tag активной записи
2 вариант - ввести переменную служащую признаком редактирования/добавления/удаления записей. Остается возможность отказа от внесенных изменений
1
Строитель
 Аватар для Nord790
889 / 556 / 194
Регистрация: 01.04.2014
Сообщений: 610
Записей в блоге: 6
10.07.2014, 17:14
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
PassManager.MainList.SelectedItems(0).SubItems.Item(0).Text = txtSiteShow.Text
PassManager.MainList.SelectedItems(0).SubItems.Item(1).Text = txtLogShow.Text
PassManager.MainList.SelectedItems(0).SubItems.Item(2).Text = txtPassShow.Text
'сохраняем данные
Dim item As ListViewItem = PassManager.MainList.SelectedItems(0)
My.Settings.Site(item.Tag) = item.Text
My.Settings.Login(item.Tag) = item.SubItems.Item(0).Text
My.Settings.Pass(item.Tag) = item.SubItems.Item(1).Text
 
My.Settings.Save()
PassManager.MainList.Items.Clear()
PassManager.loaddata()
hidebuttons()
Me.Close()
1
0 / 0 / 0
Регистрация: 08.04.2013
Сообщений: 12
10.07.2014, 17:43  [ТС]
И снова спасибо за советы, вроде разобрался.
Только вот немного переделал вот эту часть кода

VB.NET
1
2
My.Settings.Login(item.Tag) = item.SubItems.Item(0).Text
My.Settings.Pass(item.Tag) = item.SubItems.Item(1).Text
Поменял индексы, то есть вместо 0 и 1, написал 1 и 2, если я всё правильно там понял.
По крайней мере, работает.
Спасибо, комрады.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.07.2014, 17:43
Помогаю со студенческими работами здесь

Как осуществить прокрутку элемента управления в ListView до заданного элемента
Собственно вопрос в названии...Видел как это делают на VB если кто то может перевести с него могу предоставить...

ListView и получение списка папок
Есть серверная часть игры, надо написать утилиту, есть папка в директории сервера Accounts, в ней папки с логинами юзеров, мне надо...

Получение нажатых элементов listview
Добрый день! Есть listview с кастомным адаптером. В каждом элементе этого listview есть checkbox. Проблема в том что с кастомным...

Получение информации из чужого listview
Здравствуйте, столкнулся с проблемой, необходимо из listview как в диспетчере задач получить строки с подэлементами. Пробовал просто...

Получение данных из ListView в другом окне
Как можно вытащить нужную строку из ListView в другом окне? помогите плиз!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru