Конференція vbstreets - перегляд теми - як отримати дані з вибраного елемента в listview

Вітаю всіх.
При написанні навчальної програми, описаної в питанні "Читання даних з едемента ArrayList" виникло наступне запитання.

А як коректно перенести дані містяться в обраному (виділеному) елементі ListView в TextBox?

Як заповнювати, відображати і видаляти елементи в ListView в принципі зрозуміло. А ось як перенести "рядок" з даними на клієнта з ListView в TexBox або label?

але шуканого так і не знайшов.

Зробити кастинг як при отриманні даних з ArrayList не виходить

Persoon data = (Persoon) (lstvKl.SelectedItems);

тут студія лаятися починає нехорошими словами. Хоча по ідеї ListView адже теж зберігає об'єкти. І чому не виходить розпакувати цей об'єкт я не розумію.
Спробував ще так вивернутися
int index;
index = lstvKl.SelectedIndices;
lblKlantData.Text = lstvKl.Items [index] .SubItems.ToString ();
Знову студія лається на властивість SelectedIndices.

І виникає одвічне питання: Що робити?

Ramzes
Вітаю.
Дякую за підказку, але
як Index то виділеного в ListView елемента отримати?

За ідеєю повинно бути так index = ListView.SelectedIndices;

але як я вже писав вище студія в цьому випадку теж лається:
"Form1.cs (537): Can not implicitly convert type 'System.Windows.Forms.ListView.SelectedIndexCollection' to 'int'
"
Ось це я до речі зовсім не розумію. В описі цього властивості говоритися що воно повертає значення індексів виділених елементів. Якщо виділений один елемент, то повертає одне значення.
То якого типу повертається значення? Якщо його потім в int конвертувати потрібно.

Поки віз і нині там.

ЗИ і найприкріше що в школі на уроках ми нічого подібного не робили. Додавали, видаляли, сортували за стовпцями, показували елементи в ListView, а ось зчитувати дані і розміщати їх в інший контрол - цього не було.

Код: Виділити все Dim i as integer
For i = 0 to ListView.Items.Count-1
If ListView.Items # 40; i # 41; .selected
Msgbox ListView.Items # 40; i # 41; .text
MsgBox ListView.Items # 40; i # 41; .subItems # 40; 2 # 41; .text
End If
Next

MSDN писал (а): Повертає індекси обраних в даний момент елементів в даному елементі управління.

[Visual Basic]
Public ReadOnly Property SelectedIndices As _
ListView.SelectedIndexCollection

[C #]
public ListView.SelectedIndexCollection SelectedIndices

[C ++]
public: __property ListView.SelectedIndexCollection *
get_SelectedIndices ();

[JScript]
public function get SelectedIndices ():
ListView.SelectedIndexCollection;

значення властивості
ListView.SelectedIndexCollection, що містить індекси обраних елементів. Якщо в даний момент таких елементів немає, повертається порожній ListView.SelectedIndexCollection.

Примітки
Коли властивість MultiSelect встановлюється рівним true, це властивість повертає колекцію, яка містить індекси всіх елементів, вибраних в ListView. Для ListView, в якому дозволено тільки одиничний вибір, це властивість повертає колекцію з одного елемента, що містить індекс єдиного обраного елемента з ListView. Додаткова інформація щодо функцій над елементами в цій колекції см. В ListView.SelectedIndexCollection.

Якщо для елемента управління ListView потрібно отримати колекцію обраних елементів, а не позиції індексу таких елементів, використовуйте властивість SelectedItems.

Вітаю всіх.
Те що запропонував Ramzes в передостанньому пості виглядає так:
Код: Виділити все private void lstvKl_SelectedIndexChanged # 40; object sender, System.EventArgs e # 41;
# 123;
for # 40; int i = 0; i # 123;
if # 40; lstvKl.Items # 91; i # 93; .Selected # 41;
# 123;
lblKlantData.Text = lstvKl.Items # 91; i # 93; .Text + "," + lstvKl.Items # 91; i # 93; .SubItems # 91; 1 # 93; .Text + "," + lstvKl.Items # 91 ; i # 93; .SubItems # 91; 2 # 93; .Text + "," + lstvKl.Items # 91; i # 93; .SubItems # 91; 3 # 93; .Text + "," + lstvKl.Items # 91 ; i # 93; .SubItems # 91; 4 # 93; .Text + "," + lstvKl.Items # 91; i # 93; .SubItems # 91; 5 # 93; .Text;
# 125;
# 125;
lstvKl.Visible = false;
# 125;

Ramzes
Те що ти (можна сподіваюся) процетіровал з бібліотеки я вже читав. І спробував використовувати це. Але як я раніше писав це не працює.
Те що ти запропонував працює. Але як то це через одне місце.
Я так і не зрозумів чому index = ListView.SlectedIndices не спрацьовує? Адже я виділяю в ListView елемент і використовуючи цей синтаксис повинен отримати index цього елемента, якщо не встановлено властивість MultiSelect в true. Що повертається: Index або колекція з одного index а?

До речі питання в догонку. Я пишу цей код в обробнику події ListView_SelectedIndexChanged. А що означають два аргументи цього обробника події? Наприклад при Коломна клік отримуємо через e.Colomn index стовпчика за яким скликали. А тут що?

Схожі статті