Невозможно привести пользовательский класс listviewitem в vb.net - PullRequest
0 голосов
/ 29 апреля 2011

Это дополнительный вопрос к другому вопросу, который я задавал ранее.Я думал, что у меня есть все, что мне нужно, но я сталкиваюсь с другой проблемой.Я пытаюсь использовать пользовательский класс listviewitem, который присоединяет дополнительную информацию к элементу lisview.Вот класс:

Public Class albumListViewItem
    Inherits ListViewItem
    Public hash As String
    Public id As Integer
    Public provider As String
    Public providerID As String
    Public providerURL As String
    Public providerArtistID As String
    Public albumName As String
    Public albumType As String
    Public numTracks As Integer
    Public imageURLs() As String
    Public genres() As String
    Public styles() As String
    Public label As String
    Public year As String
    Public country As String
    Public rating As String
    Public editorsPick As Boolean
    Public sampleStreamURL As String
    Public providerReview As String
End Class

Когда я пытаюсь привести элемент viewview к своему пользовательскому классу, например так:

Dim albumItem As albumListViewItem = CType(lsvHidden.items.item(0), albumListViewItem)

я получаю следующую ошибку: «Невозможно привести объект типа'System.Windows.Forms.ListViewItem' для ввода 'AudioMatic.albumListViewItem'. "

Что мне здесь не хватает?

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Исходя из вашего предыдущего и этого вопроса, я думаю, что лучше всего подойдет ваша проблема - использовать обычный ListViewItem и хранить информацию о аксессуарах в ListViewItem.Tag

.1006 *

и затем извлеките его следующим образом

Dim selectedItem As ListViewItem = listView1.SelectedItems(0).Item
Dim alubmInfo As albumListViewItem = TryCast(selectedItem.Tag, alubmListViewItem)

Dim albumName as String = albumInfo.albumName

посмотрите, будет ли это решение работать на вас.

0 голосов
/ 29 апреля 2011

Рабочий код:

Public Class albumListViewItem
    Inherits ListViewItem
    Public hash As String
    Public id As Integer
    Public provider As String
    Public providerID As String
    Public providerURL As String
    Public providerArtistID As String
    Public albumName As String
    Public albumType As String
    Public numTracks As Integer
    Public imageURLs() As String
    Public genres() As String
    Public styles() As String
    Public label As String
    Public year As String
    Public country As String
    Public rating As String
    Public editorsPick As Boolean
    Public sampleStreamURL As String
    Public providerReview As String
End Class

Хранение информации с использованием listviewitem.tag:

Dim listViewItem As New ListViewItem("SomeText")
Dim albumItem As New albumListViewItem

albumItem.albumName = "Test Album"
albumItem.id = "testid"
albumItem.Text = albumItem.albumName
albumItem.year = "2011"
albumItem.numTracks = 10
'....
listViewItem.Tag = albumItem
'add viewable items to listview
albumItem.SubItems.Add(albumItem.year)
albumItem.SubItems.Add(albumItem.numTracks)
'....
ListView1.Items.Add(albumItem)

Чтение ранее сохраненной информации:

Dim albumInfo As albumListViewItem = CType(ListView1.SelectedItems(0), albumListViewItem)
Dim id as string = alumInfo.id
0 голосов
/ 29 апреля 2011

Если вы пошагово просматриваете код и смотрите переменную «lsvHidden.items.item (0)», вы должны сначала определить, действительно ли это тип «albumListViewItem» или что-то еще.Вы уверены, что это был albumListViewItem, который был добавлен в список?

Некоторые альтернативы тому, что вы делаете;1. Вы можете реализовать объект и сохранить его в теге ListViewItem.2. Следующая статья, кажется, описывает другой подход добавления столбцов к представлению списка, чтобы позволить хранить дополнительную информацию о самом просмотре списка;http://www.codeproject.com/KB/list/ListViewExtendedItem.aspx

Я могу оценить вашу ситуацию, так как я ожидал, что это сработает.И я вижу преимущества и причины для этого.Не уверен, что пример проекта кода адаптируется к тому, что вам нужно, поэтому вам нужно пересмотреть концепцию.

...