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 »
Problème résolu .. mis à jour la question pour servir de code d'exemple pour les autres. – compcentral
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
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