Erreur : La référence d'objet n'est pas définie à une instance d'un objet.

Signaler
Messages postés
259
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
5 février 2015
-
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007
-
Bonjour à tous,

J'ai ce type d'erreur dans mon code :
La référence d'objet n'est pas définie à une instance d'un objet.
Je souhaite lire un fichier dans un listview
Merci pour vos renseignements
A+

voici mon code :

'Lecture du fichier ouvert par la boite de dialogue

Dim fs
As FileStream =
New FileStream(OpenFileDialog1.FileName, FileMode.Open)

Dim li
As ListViewItem

Dim TempString
As
StringTempString = Hex(fs.ReadByte())

If Len(TempString) < 2
ThenTempString =

"0" & TempString

End
Ifli.SubItems.Add(TempString)
A voir également:

8 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
li est déclaré mais pas instancié. Il n'existe pas.

Il faut que fasse quelque part un New ListViewItem

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
259
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
5 février 2015

Merci Casy pour ton aide

Mais j'ai rien dans le listview !

Pourtant Tempstring contient bien le 1er octet de mon fichier soit "AA"
A+
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
36
Alors reprenons depuis le début.

Un ListView est constituer d'une collection d'items. Chacun de ces item est un ListViewItem (les lignes en mode détail)). Chacun de ces ListViewItem sont eux même constituer de l'item lui-même et éventuellement d'une collection de SubItems. L'item constitue la 1er colonne en mode détail et les subitems constitus les colonnes suivantes.

Donc dans ton cas, tu veux remplir les subitem d'un ListViewItem, mais il faut d'abord le créer. Tu as un message d'erreur parce li (ton ListViewItem) est certes déclaré, mais n'est à aucun moment créé (instancié). Il te faut quelque part le créer avec un instruction New ListViewItem. Le mieux étant de le faire lors de la déclaration Dim li
As New ListViewItem

Ensuite une fois que ton ListViewItem est rempli de tous ses SubItems, il te faudra le rajouter à la collection d'items de ton ListView pour qu'il y apparaisse.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Salut, normale que tu n'est rien dans ton listview, tu le créer au moment de l'execution.

Pour ton erreur d'instanciation, il faut faire :

Dim li As New ListViewItem

Mais je vois pas trop pourquoi tu fait ca. Pourquoi ne pas plutot faire : (en supposant que ta listview s'appelle lv1)

Dim fs As IO.FileStream = New IO.FileStream(OpenFileDialog1.FileName, IO.FileMode.Open)
Dim TempString As String

TempString = Hex(fs.ReadByte())
If Len(TempString) < 2 Then
    TempString = "0" & TempString
End If
lv1.Items.Add(TempString)

A plus.
Messages postés
259
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
5 février 2015

Merci Purbonheur pour ta réponse mais mon listview est deja cree sur ma form1 avec mes entetes lignes et colonnes
et j'ai toujours rien qui s'affiche
A+
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

"mon listview est deja cree sur ma form1"

Ok, alors pourqu'elle raisons obscures tu ne rajoute pas tes données directement dans ton listview au lieu de passer par un nouveau ListViewItem comme tu essai de faire ?

ListView1.Items.Add(TempString)

me semble plus direct.
Messages postés
259
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
5 février 2015

Mes données n'apparaisent pas sur le listview
Je ne comprends pas pourquoi

ListView1.Items.Add(TempString) 
J'affiche uniquement le 1ere colonne
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Salut, quelque chose me dit que tu n'a pas lu le post de Casy.
Si tu veux remplir les colonnes de ton listview il faut que tu parcours la collection de collection d'items.
Ton listview a une propriété Items, qui est une collection d'objet. Ca représente les données dans la premiere colonne.
à chaque fois que tu fait ListView1.Items.Add(TempString) tu rajoute une ligne.
Si tu veux remplire sur une ligne, il faut que tu récupère l'objet dans la colonne précédente et que tu rajoute un objet dans sa collection subItems.

Dim fs As IO.FileStream = New IO.FileStream(OpenFileDialog1.FileName, IO.FileMode.Open)
Dim TempString As Integer
Dim SubItem As ListViewItem = Nothing

If ListView1.Items.Count > 0 Then SubItem = ListView1.Items(ListView1.Items.Count - 1)

TempString = fs.ReadByte()
If Len(TempString) < 2 Then
    TempString = "0" & TempString
End If
If SubItem IsNot Nothing Then
            SubItem.SubItems.Add(TempString)
Else
            ListView1.Items.Add(TempString)
End If

Il faut que tu adapte l'exemple à se que tu veux faire.

A plus.