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 :

Controle utilisateur : "la reference d'objet n'est pas definie a une instance d'un objet"


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut Controle utilisateur : "la reference d'objet n'est pas definie a une instance d'un objet"
    Bonjour,

    J'ai créé un controle utilisateur et lorsque je le pose sur une Form, j'ai des messages d'erreurs:
    Procédure : NomProcedure
    Description : la reference d'objet n'est pas definie a une instance d'un objet

    Toutes ces erreurs pointent des propriétés du contrôle.
    Public Property NomProcedure() As Double
    ou
    Public Readonly Property NomProcedure() As Double

    D'où viennent et comment corriger ces erreurs ?
    Merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    Il doit manquer des instanciations d'objets dans le getter des propriétés en question. Mainenant, sans code, c'est difficile de dire d'où vient le problème.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Le programme complet est un peu lourd donc j'ai fait du condensé en espérant avoir mis assez d'infos !

    La classe "Mesure" est mon contrôle.
    Voici un exemple de propriété qui génère l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Explicit On
    Public Class Mesure
        Dim BalourdRaz As TPolaireDegreDynamique
     
        Public Property BalourdRaz1Amplitude() As Double
            Set(ByVal New_BalourdRaz1Amplitude As Double)
                BalourdRaz.PDD(1).Amplitude = New_BalourdRaz1Amplitude
            End Set
            Get
                BalourdRaz1Amplitude = BalourdRaz.PDD(1).Amplitude
            End Get
        End Property
    End Class
    Les structures sont déclarées dans une autres Classe :
    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
     
    Option Explicit On
    Public Class Cls_CalVect
     
        Public Structure TPolaireDegre
            Dim Amplitude As Double
            Dim Phase As Double
        End Structure
     
        Public Structure TPolaireDegreDynamique
            Dim PDD() As TPolaireDegre
            Public Sub Initialyze()
                ReDim PDD(3)
            End Sub
        End Structure
    End Class

  4. #4
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit On
    Public Class Mesure
        Dim BalourdRaz As TPolaireDegreDynamique = New TPolaireDegreDynamique 
    
        Public Property BalourdRaz1Amplitude() As Double
            Set(ByVal New_BalourdRaz1Amplitude As Double)
                BalourdRaz.PDD(1).Amplitude = New_BalourdRaz1Amplitude
            End Set
            Get
                BalourdRaz1Amplitude = BalourdRaz.PDD(1).Amplitude
            End Get
        End Property
    End Class
    Le New permet de créer une nouvelle instance de ta classe TPolaireDegreDynamique.

    D'où l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Description : la reference d'objet n'est pas definie a une instance d'un objet

    Si besoin, voici un tuto sur la programmation orientée objet en VB.NET

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Le New n'a pas corrigé l'erreur.
    Il semblerait que l'erreur vienne du tableau.
    Avec cette modif, je n'ai plus d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit On
    Public Class Mesure
        Dim BalourdRaz As TPolaireDegreDynamique = New TPolaireDegreDynamique 
     
        Public Property BalourdRaz1Amplitude() As Double
            Set(ByVal New_BalourdRaz1Amplitude As Double)
                BalourdRaz.PDD.Amplitude = New_BalourdRaz1Amplitude
            End Set
            Get
                BalourdRaz1Amplitude = BalourdRaz.PDD.Amplitude
            End Get
        End Property
    End Class
    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
    Option Explicit On
    Public Class Cls_CalVect
     
        Public Structure TPolaireDegre
            Dim Amplitude As Double
            Dim Phase As Double
        End Structure
     
        Public Structure TPolaireDegreDynamique
            Dim PDD As TPolaireDegre
        '    Public Sub Initialyze()
        '        ReDim PDD(3)
        '    End Sub
        End Structure
    End Class
    Comment dois-je déclarer mon tableau ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 34
    Points : 17
    Points
    17
    Par défaut
    Le programme complet est un peu lourd donc j'ai fait du condensé en espérant avoir mis assez d'infos !
    Petite précision :
    Il y a une gestion des défauts dans la procédure :
    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
    Public Property BalourdRaz1Amplitude
            Set(ByVal New_BalourdRaz1Amplitude)
                On Error GoTo errH
     
                BalourdRaz.PDD(1).Amplitude = New_BalourdRaz1Amplitude
     
                On Error GoTo 0
                Exit Property
    errH:
                MsgBox("Procédure : Mesure.BalourdRaz1Amplitude" & vbCrLf & "Description : " & Err.Description, vbCritical, "Erreur Projet : MesNI")
                Err.Raise(Err.Number, "Mesure.BalourdRaz1Amplitude", Err.Description)
            End Set
            Get
                On Error GoTo errH
     
                BalourdRaz1Amplitude = BalourdRaz.PDD(1).Amplitude
     
                On Error GoTo 0
                Exit Property
    errH:
                MsgBox("Procédure : Mesure.BalourdRaz1Amplitude" & vbCrLf & "Description : " & Err.Description, vbCritical, "Erreur Projet : MesNI")
                Err.Raise(Err.Number, "Mesure.BalourdRaz1Amplitude", Err.Description)
            End Get
        End Property
    C'est cette gestion des défauts qui me remonte le message d'erreur quand je pose mon contrôle sur ma Form.

    Après, ça n'explique toujours pas le défaut en question !

  7. #7
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    BalourdRaz.PDD(1).Amplitude = New_BalourdRaz1Amplitude
    BalourdRaz.PDD(1) fait référence à un objet de type TPolaireDegre, qui doit aussi être instancié !!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    BalourdRaz.PDD(1) = new TPolaireDegre
    BalourdRaz.PDD(1).Amplitude = New_BalourdRaz1Amplitude

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Tu programmes en vb6 ou vb.net ?

    En .net, la gestion des erreurs est avec try ... catch ...
    On utilise les classes, les collections et les dictionnaires.
    La méthode new permet l'initialisation de la classe.

    Voici un exemple de ce que cela pourrait donner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class TPolaireDegre
        Public Amplitude As Double
        Public Phase As Double
    End Class
     
    Public Class TPolaireDegreDynamique
        Public PDD As New Dictionary(Of Integer, TPolaireDegre)
        Sub New(nb As Integer)
            For i As Integer = 1 To nb
                PDD.Add(i, New TPolaireDegre)
            Next
        End Sub
    End Class
    Ce n'est pas une bonne idée d'utiliser des propriétés pour un ensemble d'éléments (même si c'est possible, on pourait par des propriètés indexées) surtout une par élément. Le jour ou cela évolue tu devras tout reprendre.
    On cré donc des méthodes d'accès aux collections (dictionnaire dans notre cas), et bien sur le new pour l'init.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Class Mesure
        Public BalourdRaz As TPolaireDegreDynamique
        Sub New(nb As Integer)
            BalourdRaz = New TPolaireDegreDynamique(nb)
        End Sub
        Public Sub SetAmplitude(val As Integer, ampl As Double)
            BalourdRaz.PDD(val).Amplitude = ampl
        End Sub
        Public Function GetAmplitude(val As Integer) As Double
            Return BalourdRaz.PDD(val).Amplitude
        End Function
    End Class
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Class Form1
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Dim m As New Mesure(3)
            m.SetAmplitude(1, 10)
            MessageBox.Show(m.GetAmplitude(1))
        End Sub
    End Class
    Je n'ai pas mis les tests pour éviter les erreurs (valeur création dico) ni la gestion d'erreur
    C'est une approche, il y en a d'autres, c'est toi qui vois.

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/04/2015, 12h42
  2. Objet non definie a une instance d'un objet
    Par andy331 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/03/2010, 19h14
  3. Réponses: 4
    Dernier message: 24/08/2008, 01h40
  4. Réponses: 1
    Dernier message: 26/10/2007, 21h53
  5. [Firebird]Erreur:la reference d'objet n'est pas definie
    Par monmien dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2006, 09h20

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