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 :

Bug sur une collection


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
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut Bug sur une collection
    Bonjour , j'aie besoin d'un petit coup de main sur un bug (une collection à nourrir et la ligne qui plante est en commentaire dans le code.C'est la ligne 105)

    Avant je vais expliquer un peu mon programme .IL est capable de dessiner et d'effacer des lignes .

    Pour cela quand je veux dessiner une droite , je désérialize au préalable afin de réperer une collection de droites et un index (voir la variable indexlepluseleve) .Tout ceci pour éviter des faire des doublons dans ma collection .Ensuite et seulement ensuite , je peux dessiner une nouvelle droite et l'ajouter à ma collection puis sérialiser .

    Au départ il y a un cas particulier c'est le cas ou mon fichier xml est vide (flux vide) et donc ma collection de droite aussi est vide (Nothing) .
    J'aie mis une condition sur un flux vide pour éviter un plantage lors de la déserialisation (voir la ligne If FluxdeFichier.Length <> 0 Then )

    Pour l'instant mon fichier est vide est je pense que cela perturbe la creation de ma collection .Le message d'erreur me dit que j'aie oublié d'instancier un objet mais bof pour moi ma classe est bien instanciée .

    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
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    ports System.Runtime.Serialization.Formatters.Soap
    Imports System.IO
    Imports System.Math
    Imports System.Windows.Forms.DataVisualization.Charting
    Imports System.Data
     
    Module droite0
     
        Private couleur As Color     
        Private epaisseur As Integer
        Private x1, y1 As Double
        Private x2, y2 As Double
     
        Dim ptCourant As Point = New Point(0, 0)
        Dim ptPrecedent As Point = New Point(0, 0)
        Dim boolOnDessine As Boolean = False
     
        Public macollection As New ArrayList
        Public mySeries As Series
        Public mySeriesNom As String
        Private Function deserialiseSTP() As ArrayList
     
            Dim fileExists As Boolean
            fileExists = My.Computer.FileSystem.FileExists("C:\Documents and Settings\a\Mes documents\Visual Studio 2010\Projects\TEST\TEST 18-1\bin\Debug\droite.xml")
     
            Dim macollection As New ArrayList
            macollection = Nothing  
     
            If fileExists = True Then
     
                Dim FluxdeFichier As Stream = File.OpenRead("C:\Documents and Settings\a\Mes documents\Visual Studio 2010\Projects\TEST\TEST 18-1\bin\Debug\droite.xml")
                If FluxdeFichier.Length <> 0 Then 
                    Dim deserializer As New SoapFormatter
                    macollection = CType(deserializer.Deserialize(FluxdeFichier), ArrayList)                FluxdeFichier.Close()
                End If
                End If
     
                Return macollection
     
        End Function
     
        Private Function indexdeligne(ByVal collectiondedroites) As Integer
     
            Dim i, indexencours, indexlepluseleve As Integer
            Dim drcol As objetdroite
            indexlepluseleve = 0 
     
            If collectiondedroites <> Nothing
                For i = 0 To collectiondedroites.count - 1
                    drcol = collectiondedroites(i)
                    indexencours = CInt(drcol.mySeriesNom.Replace("Ligne", ""))
                    If indexencours > indexlepluseleve Then
                        indexlepluseleve = indexencours
                    End If
     
                Next
            End If
     
            Return indexlepluseleve
     
        End Function
     
        Public Sub dessineunedroite(ByVal contientlescoordonnees As System.Windows.Forms.MouseEventArgs, ByVal graphique As Graphics, ByVal compteur As Integer, ByVal couleur As Color, ByVal epaisseur As Integer)
     
            Dim BoutonPresse As MouseButtons = contientlescoordonnees.Button
            If BoutonPresse = Windows.Forms.MouseButtons.Left Then             boolOnDessine = True
                ptCourant = contientlescoordonnees.Location
            End If
     
     
            If boolOnDessine Then
     
                If ptPrecedent.X <> 0 And ptPrecedent.Y <> 0 Then
                    ptPrecedent = ptCourant
     
                    x2 = ptCourant.X
                    y2 = ptCourant.Y
     
                    x1 = Convert.ToSingle(Form1.Chart1.ChartAreas("ChartArea1").AxisX.PixelPositionToValue(x1))
                    y1 = Convert.ToSingle(Form1.Chart1.ChartAreas("ChartArea1").AxisY.PixelPositionToValue(y1))
                    x2 = Convert.ToSingle(Form1.Chart1.ChartAreas("ChartArea1").AxisX.PixelPositionToValue(x2))
                    y2 = Convert.ToSingle(Form1.Chart1.ChartAreas("ChartArea1").AxisY.PixelPositionToValue(y2))
     
                    Dim collectiondedroites As New ArrayList
                    collectiondedroites = deserialiseSTP()   
                    Dim indexmax As Integer
     
                    indexmax = indexdeligne(collectiondedroites)
     
                    If indexmax = 0 Then   
                        mySeries = Form1.Chart1.Series.Add("Ligne1")
                    Else 
                        mySeries = Form1.Chart1.Series.Add("Ligne" + (indexmax + 1).ToString())
     
                    End If
     
                    mySeries.Points.AddXY(x1, y1)
                    mySeries.Points.AddXY(x2, y2)
                    mySeries.ChartType = SeriesChartType
                    mySeries.Color = couleur   
                    mySeries.BorderWidth = epaisseur 
                    mySeriesNom = mySeries.Name 
     
                    Dim stockdroite As New objetdroite(mySeriesNom, couleur, epaisseur, x1, y1, x2, y2)               
     collectiondedroites.Add(stockdroite)   'BUG ICI la collection doit grandir au fur et a mesure que je dessine
                    ' La référence d'objet n'est pas définie à une instance d'un objet*!!
    'conseils*:utilisez le mot clé new pour créer une instance d’objet (je pense l’avoir fait)
    ‘déterminer si l’objet est null avant d’appeler la méthode
    'je ne sais pas trop mais stockdroite quand je l’espionne contient bien mes paramètres
    'la variable collectiondedroites contient «*Nothing*» mais justement je voudrais la remplir
     
                    pourserialiser(mySeriesNom, couleur, epaisseur, x1, y1, x2, y2, collectiondedroites)
     
                    Form1.ToolStripButton1.Checked = False                     ptPrecedent = New Point(0, 0)        
     
                Else  
                    ptPrecedent = ptCourant
                    x1 = ptCourant.X
                    y1 = ptCourant.Y
     
                End If
     
            End If
        End Sub
     
     
     
        Public Sub redessinedroite(ByVal index, ByVal droite, ByVal Chart)
     
     
            Dim mySeries As Series    
            mySeries = Chart.Series.Add(droite.mySeriesNom())
            mySeries.Points.AddXY(droite.x1, droite.y1)
            mySeries.Points.AddXY(droite.x2, droite.y2)
            mySeries.ChartType = SeriesChartType.Line
            mySeries.Color = droite.couleur   
            mySeries.BorderWidth = droite.epaisseur   
     
        End Sub
     
     
     
        Private Sub pourserialiser(ByVal mySeriesNom, ByVal couleur, ByVal epaisseur, ByVal x1, ByVal y1, ByVal x2, ByVal y2, ByVal collectiondedroites)
     
     
     
            Dim fileExists As Boolean
            fileExists = My.Computer.FileSystem.FileExists("C:\Documents and Settings\a\Mes documents\Visual Studio 2010\Projects\TEST\TEST 18-1\bin\Debug\droite.xml")
     
            If fileExists = True Then  
                Dim FluxDeFichier As Stream = File.OpenWrite("droite.xml")
                Dim Serialiseur As New SoapFormatter
                Serialiseur.Serialize(FluxDeFichier, collectiondedroites) ' 
                FluxDeFichier.Close()
            Else  
                Dim FluxDeFichier As FileStream = File.Create("droite.xml")
                Dim Serialiseur As New SoapFormatter
                Serialiseur.Serialize(FluxDeFichier, collectiondedroites)
                FluxDeFichier.Close()
            End If
     
     
        End Sub
     
    End Module
     
     
     
     
     
     
     
    Imports System.Windows.Forms.DataVisualization.Charting
    <Serializable()>
    Public Class objetdroite
        Public mySeriesNom As String
        Public couleur As Color
        Public epaisseur As Integer
        Public x1, y1 As Integer
        Public x2, y2 As Integer
     
     
        Public Sub New(ByVal nomserie As String, ByVal couleurparam As Color, Optional ByVal epaisseurparam As Integer = 0, Optional ByVal x1param As Integer = 0, Optional ByVal y1param As Integer = 0, Optional ByVal x2param As Integer = 1, Optional ByVal y2param As Integer = 1)
     
            x1 = x1param
            y1 = y1param
            x2 = x2param
            y2 = y2param
            couleur = couleurparam
            epaisseur = epaisseurparam
            mySeriesNom = nomserie
        End Sub
     
        Public Function IsAt(ByVal x As Integer, ByVal y As Integer) As Boolean
            Return PointNearSegment(x, y, x1, y1, x2, y2)   
        End Function
     
     
        Private Function IsSelected() As Boolean
            Return 0
        End Function
    End Class

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par aA189 Voir le message
    Au départ il y a un cas particulier c'est le cas ou mon fichier xml est vide (flux vide) et donc ma collection de droite aussi est vide (Nothing) .
    Nothing, ce n'est pas la même chose qu'une collection vide... Nothing, c'est rien du tout, pas de collection, même pas une collection vide.

    Citation Envoyé par aA189 Voir le message
    Pour l'instant mon fichier est vide est je pense que cela perturbe la creation de ma collection.
    Effectivement, puisque dans ce cas la méthode deserializeSTP renvoie Nothing

    Citation Envoyé par aA189 Voir le message
    Le message d'erreur me dit que j'aie oublié d'instancier un objet mais bof pour moi ma classe est bien instanciée .
    Bah non, puisque la variable vaut Nothing... tu fais un New ArrayList juste avant, mais il sert à rien puisque tu l'écrases avec le résultat de deserializeSTP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Merci Tomlev ...En effet je m'enmêle les pinceaux entre les notions de "vide" et de "nothing" .J'aie supprimé mon affection + une petite modif plus bas sur une condition .Le programme fonctionne ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. tri alphabétique sur une collection
    Par samtheh dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/06/2007, 14h50
  2. Probleme de scope sur une collection
    Par ataya dans le forum Struts 1
    Réponses: 10
    Dernier message: 23/02/2007, 19h19
  3. VBNET : Agir sur une collection de contrôles ?
    Par VinZent dans le forum Windows Forms
    Réponses: 3
    Dernier message: 12/11/2006, 09h01
  4. Réponses: 1
    Dernier message: 25/10/2006, 13h41
  5. [Struts] <logic:iterate> sur une collection d objets c
    Par trax020 dans le forum Struts 1
    Réponses: 2
    Dernier message: 12/05/2005, 00h11

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