2010-01-12 9 views
1

J'ai un listview mais j'aimerais ajouter 3 propriétés (par exemple l'une d'entre elles est "image") aux listviewitems qui s'y trouvent.
j'étais bien de faire une classe personnalisée avec les 3 propriétés et juste héritant ListViewItem mais maintenant je dois utiliser MultiSelect, donc cela signifie faire des choses comme (en boucles For Each):redéfinir une classe/ajouter des propriétés à un ListviewItem (vb.net)

ListView1.SelectedItems.Item(i).Image
ne fonctionnent pas parce qu'il renvoie un ListViewItem pas ma CustomClass.
je pourrais toujours faire:
Ctype(ListView1.selectedItems(i), MyCustomClass).Image

Mais l'utilisation que plus et plus semble à nouveau comme une perte/mauvaise façon de le faire?

+0

Non, c'est la bonne façon de le faire. Il aurait été bien que Windows Forms soit mis à jour pour prendre en charge les génériques, mais cela ne s'est pas produit. –

Répondre

2

C'est simplement comment cela fonctionne. ListView peut stocker n'importe quel type de ListItem et pour accéder aux propriétés de votre distribution dérivée, vous devez le lancer. Vous le faites correctement.

2

Il n'est pas particulièrement judicieux de sous-classer ListViewItem simplement pour y attacher des attributs personnalisés. La classe fournit un Tag property spécifiquement pour ce but et vous devez le remplir avec votre propre objet au lieu de sous-classer. Cela pourrait ne pas faire une grande différence sur le plan de la syntaxe, mais c'est un meilleur design.

+0

mais theres seulement 1 tag, j'ai besoin d'une propriété d'image, une CustomClass et une chaîne. –

+1

Ensuite, vous devez attacher une instance d'une classe personnalisée qui contient trois propriétés à la propriété 'Tag' de l'instance' ListViewItem'. –

+0

Mais si j'utilise tag alors faire ListviewItem.tag.Image il ne montre pas dans intellisense (c'est ce que la boîte est appelée lorsque vous tapez un arrêt complet droit?) Suggérant que ce n'est pas la bonne façon de le faire. –

Questions connexes