2011-04-29 1 views
1

Je souhaite stocker des informations supplémentaires sur un élément listview à l'aide d'une classe personnalisée, mais je n'arrive pas à le faire fonctionner. J'utilise actuellement ce code pour accomplir quelque chose de similaire en utilisant un élément de listbox. Je veux juste faire la même chose avec un listview.Création d'une classe listViewItem personnalisée pour stocker des informations masquées supplémentaires - VB .Net

Public Class myListboxItem 
    Public id As String 
    Public rootFolder As String 
    Public name As String 
    Public info() As String 
    Public Text As String 
    Public Overrides Function ToString() As String 
     Return Me.Text 
    End Function 
End Class 

Je définissez les propriétés comme celui-ci

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim item As New myListboxItem 
    item.Text = "This is a Test" 
    item.rootFolder = "C:\test" 
    item.id = "testid" 
    item.name = "Test Item" 
    item.info(0) = "Some Information" 
    lstExample.Items.Add(item) 
End Sub 

Ensuite, je peux accéder à ces propriétés supplémentaires en utilisant ceci:

Private Sub lstExample_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstExample.SelectedIndexChanged 
    Dim item As myListboxItem = CType(lstExample.SelectedItem, myListboxItem) 
    messagebox.show(item.id) 
    messagebox.show(item.rootFolder) 
    messagebox.show(item.name) 
    messagebox.show(item.info(0)) 
End sub 

Alors ma question est de savoir comment cela peut se faire avec un listview? Voici ce que j'ai essayé:

Public Class myListViewItem 
    Public id As String 
    Public rootFolder As String 
    Public name As String 
    Public info() As String 
    Public Text As String 
    Public Overrides Function ToString() As String 
     Return Me.Text 
    End Function 
End Class 

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim item As New myListViewItem 
    item.Text = "This is a Test" 
    item.rootFolder = "C:\test" 
    item.id = "testid" 
    item.name = "Test Item" 
    item.info(0) = "Some Information" 
    lsvExample.Items.Add(item) 
End Sub 

Private Sub lsvExample_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lsvExample.SelectedIndexChanged 
    'problem with the next line 
    Dim item As myListViewItem = CType(lsvExample.SelectedItems, myListViewItem) 
    'tried this too.. similar error 
    Dim item2 As myListViewItem = CType(lsvExample.SelectedItems(0), myListViewItem) 
    messagebox.show(item.id) 
    messagebox.show(item.rootFolder) 
    messagebox.show(item.name) 
    messagebox.show(item.info(0)) 
End sub 

L'erreur que je reçois est « Valeur de type « System.Windows.Forms.listView.SelectedListViewItemCollection » ne peut pas être converti en « MyProject.myListViewItem »

+0

Problème résolu .. mis à jour la question pour servir de code d'exemple pour les autres. – compcentral

+0

s'il vous plaît ne pas modifier la question pour corriger le problème - soit ne laisse pas une question, ou une question qui n'a pas de sens, car il demande ce qui ne va pas avec le code de travail. J'ai annulé votre dernière modification, mais veuillez ajouter une nouvelle réponse si la réponse acceptée n'explique pas entièrement le problème. Gardez à l'esprit que ce n'est pas seulement un forum d'aide, mais nous construisons une référence de questions et réponses pour aider les autres à l'avenir. – jcsanyi

+0

bon à savoir, mais depuis plus de deux ans, je n'ai aucune idée de ce que ma solution était maintenant. Si vous l'avez annulé, vous auriez dû prendre ma solution et la placer dans une réponse que je pouvais accepter. – compcentral

Répondre

2

Faites votre Class myListboxItem Hériter à partir de ListViewItem.

+0

J'ai essayé cela ... n'a pas fonctionné. Une seconde et je vais recevoir le message d'erreur. – compcentral

+0

Dim item Comme myListViewItem = CType (listview1.SelectedItems, myListViewItem) me donne cette erreur - "Valeur de type 'System.Windows.Forms.listView.SelectedListViewItemCollection' ne peut pas être convertie en 'MyProject.myListViewItem" – compcentral

+0

Essayez 'CType (listview1 .SelectedItems (0), myListViewItem) 'après s'être assuré que listview1.SelectedItems.Count> 0 –

1

Je sais que ce sujet a 2 ans, mais je viens en face à la recherche d'une réponse. Juste moi-même essayé et cela fonctionne très bien avec .net 2010: Il peut aider quelqu'un :)


Public Class ListViewItemExtra 
    Inherits ListViewItem 
    Private _companyName As String = "" 
    Private _contactPerson As String = "" 
    Private _address As String = "" 
    Public Property CompanyName As String 
     Get 
      Return _companyName 
     End Get 
     Set(value As String) 
      _companyName = value 
      Text = ToString() 
     End Set 
    End Property 
    Public Property ContactPerson As String 
     Get 
      Return _contactPerson 
     End Get 
     Set(value As String) 
      _contactPerson = value 
      Text = ToString() 
     End Set 
    End Property 
    Public Property Address As String 
     Get 
      Return _address 
     End Get 
     Set(value As String) 
      _address = value 
      Text = ToString() 
     End Set 
    End Property 
    Public Overrides Function ToString() As String 
     Return _companyName + " -> " & _address.Replace(vbCrLf, " ") 
    End Function 
    Public Function ToPrintString() As String 
     Dim heading As String = "" 
     If _contactPerson "" Then 
      heading = "Attention: " & _contactPerson & vbCrLf & vbCrLf 
     End If 
     Return heading & _companyName & vbCrLf & _address 
    End Function 
End Class 
Questions connexes