IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

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


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut La référence d'objet n'est pas définie à une instance d'un objet.
    Bonjour à tous,

    Je tourne, je vire, depuis 24 h... J'ai lu tous les messages (ou presque) du forum sur le sujet mais rien ne m'apporte de lumière. J'ai cette fameuse erreur : La référence d'objet n'est pas définie à une instance d'un objet et je n'arrive pas à m'en débarasser ! J'en deviens fou. Voilà le code et j'ai beau être pessimiste, je n'arrive pas à y trouver à redire. ( J'ai néanmoins essayé pas mal de combinaisons... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
     Public Sub ChargeTabPaysLang()
     
            Dim Words() As String
            Dim Word As String = String.Empty
            Dim TabPaysLang(137, 3) as string
            Dim FileString As String = String.Empty
            Dim f As String = My.Application.Info.DirectoryPath & "\_VAR_PAYS_PL.txt"
     
            If File.Exists(f) Then
                System.IO.File.WriteAllText(f, My.Resources._VAR_PAYS_PL)
            Else
                MessageBox.Show("Fichier des Pays -> Langues impossible à trouver..." & vbCrLf & "Désolé...")
                Exit Sub
            End If
     
            'chaque ligne du fichier se présente comme suit : FRANCAIS_FRANCE*France.jpg*18
     
            Dim fr As New System.IO.StreamReader(CStr(f))
            Dim i%
     
            For i = 1 To 137
                FileString = fr.ReadLine
                If FileString = "" Then Exit For
                Words = Split(FileString, "*")
                X = 1
                For Each Word As String In Words
     
                  'Il bugue à cette ligne (au mot Word semble-t-il):
     
                    If X = 1 Then TabPaysLang(i, 1) = Word
                    If X = 2 Then TabPaysLang(i, 2) = Word
                    If X = 3 Then TabPaysLang(i, 3) = Word
                    X = X + 1
                Next Word
            Next
     
        End Sub
     
    'J'ai essayé en indexant les Word :
     
                For Each Word As String In Words
     
                  'Il bugue à cette ligne (au mot Word semble-t-il):
     
                    If X = 1 Then TabPaysLang(i, 1) = Word(0)
                    If X = 2 Then TabPaysLang(i, 2) = Word(1)
                    If X = 3 Then TabPaysLang(i, 3) = Word(2)
                    X = X + 1
     
                Next Word
     
                'mais ça ne change pas l'erreur. En fait, je ne sais pas trop, compte
                'tenu que c'est dans une boucle For Each, si je dois indexer les Word ou pas.
    J'ai essayé ausi en commençant l'indexation des Word à 1 et non plus à 0 (ce qui est faux me semble-t-il) et j'ai toujours la même erreur au même endroit.

    Mais, bon... Ça coûtait rien d'essayer (et d'apprendre). De toutes façon, j'ai mis la ceinture en plus des bretelles, au cas où... J'ai mis un compteur (X). C'est pas du pur, pur, travail, mais mon problème, pour l'instant, c'est que ça fonctionne et, surtout, que je comprenne d'où vient l'erreur. Après j'arrangerais tout ça.

    Alors si quelqu'un a une idée, elle sera la bienvenue, je vous assure.

    D'avance, merci.

    [Edit] Personne pour m'aider ? Je sais pourtant, à la lecture de tout ce qui peut exister comme messages de forums que cette exception est très souvent levée. Ça a dû vous arriver.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 88
    Par défaut
    Pourquoi tu déclare ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Word As String = String.Empty
    essaie de supprimer cette ligne.
    Il te suffie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Word As String In Words

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour Whombat
    Vu ton post a propos des langues et du message "La référence d'objet n'est pas définie à une instance ".....
    Bizarre mais on dirait que ca n'est pas la totalite du code que tu as poste....
    Mis à part l'observation de moncef2010 sur le nettoyage , Ton code gagnerait à etre serieusement lifte....
    Les observations portent en vb.net sur les mauvaises habitudes à abandonner :
    -indices tableaux en vb.net demarre à zero(TabPaysLang & words).
    -controle des bornes superieures des tableaux par emploi de Length-1 et GetUpperBound, abus des declarations implicites ou l'omission carrement(met Explicit On dans ton form pour etre avise par le compilateur à la compilation sur ces cas) ...
    Pour ce faire je te reposte ton code moyennant des corrections en 2 variantes pour etre plus concret:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    'Corne & Tocsin :en VB.NET:index tableaux commencent à zero.
    'un tableau de (137,3) elements est numerote de 0 à 136 et 0 à 2
    'pour eviter des erreurs :
    'utilise Length =>tableaux à une dimension
    'utilise GetUpperBound(0),GetUpperBound(1)=>tableaux à une dimension
    '
    'Corne 2: utilise la declaration inline dans les boucles For.
    '
    'NB:plus grave encore il n'est pas posible en vb.net de declarer
    'un tableau demarrant à 1
    '
    'Oyez,Oyez sujets de Messire VB.Net
    'Qu'on se le dise.....
    Option Explicit On
    Imports System.IO
    Public Class Form4
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    		ChargeTabPaysLang()
    		'ChargeTabPaysLangBis()
    	End Sub
    	Public Sub ChargeTabPaysLang()
     
    		Dim Words() As String
    		' nettoie le code.A virer: Dim Word As String = String.Empty
    		' deja declare inline dans la boucle for
     
    		Dim TabPaysLang(137, 3) As String
    		Dim FileString As String = String.Empty
    		Dim strPath As String = My.Application.Info.DirectoryPath & "\_VAR_PAYS_PL.txt"
     
    		If File.Exists(strPath) Then
    			System.IO.File.WriteAllText(strPath, My.Resources._VAR_PAYS_PL)
    		Else
    			MessageBox.Show("Fichier des Pays -> Langues impossible à trouver..." & vbCrLf & "Désolé...")
    			Exit Sub
    		End If
     
    		'Format de ligne  fichier : FRANCAIS_FRANCE*France.jpg*18
    		Dim sReader As New System.IO.StreamReader(strPath)
     
    		'Nettoyage :Dim I% reliquat ante-diluvien.
     
    		'Declaration omise du X
    		Dim X As Integer
     
    		For I As Integer = 0 To TabPaysLang.Length - 1	  'utilise Length-1 :pas d'erreur sur les bornes de tableau
    			FileString = sReader.ReadLine
    			If FileString = "" Then Exit For
    			Words = Split(FileString, "*")
     
    			'X est un indice => part à zero et non 1  
    			X = 0
    			For Each Word As String In Words
     
    				'Il ne beugle plus ou "warne" à cette ligne (au mot Word semble-t-il):
     
    				If X = 0 Then TabPaysLang(I, X) = Word
    				If X = 1 Then TabPaysLang(I, X) = Word
    				If X = 2 Then TabPaysLang(I, X) = Word
    				X = X + 1
    			Next Word
    		Next
    		'Affiche les resultats dans TextBox1
    		'utilise GetUpperBound pour  eviter
    		'la aussi les erreurs sur les bornes des 2 dimensions
    		For I As Integer = 0 To TabPaysLang.GetUpperBound(0)
    			For J As Integer = 0 To TabPaysLang.GetUpperBound(1)
    				Me.TextBox1.Text = Me.TextBox1.Text & TabPaysLang(I, J) & "  "
    			Next
    			'saut de ligne
    			Me.TextBox1.Text = Me.TextBox1.Text & vbCrLf
    		Next
     
    	End Sub
    	'version 2: corrigee plus simple et plus claire
    	Public Sub ChargeTabPaysLangBis()
     
    		Dim Words() As String
    		Dim TabPaysLang(137, 3) As String
    		Dim FileString As String = String.Empty
    		Dim strPath As String = My.Application.Info.DirectoryPath & "\_VAR_PAYS_PL.txt"
     
    		If File.Exists(strPath) Then
    			System.IO.File.WriteAllText(strPath, My.Resources._VAR_PAYS_PL)
    		Else
    			MessageBox.Show("Fichier des Pays -> Langues impossible à trouver..." & vbCrLf & "Désolé...")
    			Exit Sub
    		End If
     
    		'chaque ligne du fichier se présente comme suit : FRANCAIS_FRANCE*France.jpg*18
    		Dim sReader As New System.IO.StreamReader(strPath)
     
    		For I As Integer = 0 To TabPaysLang.Length - 1
    			FileString = sReader.ReadLine
    			If FileString = "" Then Exit For
    			Words = Split(FileString, "*")
     
    			'peut reecrit plus simplement encore
    			For J As Integer = 0 To Words.Length - 1
    				If J = 0 Then
    					TabPaysLang(I, J) = Words(J)
    				ElseIf J = 1 Then
    					TabPaysLang(I, J) = Words(J)
    				ElseIf J = 2 Then
    					TabPaysLang(I, J) = Words(J)
    				End If
    			Next
    		Next
    		'Affiche les resultats dans textbox
    		For I As Integer = 0 To TabPaysLang.GetUpperBound(0)
    			For J As Integer = 0 To TabPaysLang.GetUpperBound(1)
    				Me.TextBox1.Text = Me.TextBox1.Text & TabPaysLang(I, J) & "  "
    			Next
    			'saut de ligne
    			Me.TextBox1.Text = Me.TextBox1.Text & vbCrLf
    		Next
    	End Sub
     
     
    End Class
    bon code............

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/09/2007, 10h38
  2. Réponses: 2
    Dernier message: 09/09/2007, 14h25
  3. Réponses: 8
    Dernier message: 04/06/2007, 16h20
  4. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  5. Réponses: 8
    Dernier message: 11/07/2006, 17h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo