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 :

Quel type entre SortedList SortedList (of) Dyctionnary [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Quel type entre SortedList SortedList (of) Dyctionnary
    Bonjour à tous,
    J'aurais besoin de stocker mes données d'une certaines façon que je vais détailler ci-après mais je ne trouve pas le type de variable adéquat.
    Cette variable ou collection ou autre sera manipulée dans une classe (mais je pense que le problème reste le même).
    Cette classe me servira pour stocker chaque points de coupure d'une vidéo (N° de Frame), une vidéo pouvant être divisée en plusieurs Clips.
    Les données a stocker :
    ClipName as String, FrameBegin as integer et FrameEnd as integer (+ d'autres données propre au clip si besoin).
    Exemple :
    -Clip1, FrameBegin=1200, FrameEnd=1500, ...
    -Clip2, FrameBegin=500, FrameEnd=600, ...

    Chaque Clips doit pouvoir être trié automatiquement lorsque je l'ajoute à ma collection (ou autres), la clé de tri étant FrameBegin puisque c'est la seule valeur qui me permet de trier les clips dans le même ordre que la vidéo originale.
    Je doit pouvoir accéder aux données de chaque clip soit à partir d'une clé nommé (ex: item("Clip1") ou à partir d'un l'index (ex: Item(0)).
    Nota : Si j'ajoute les Clips dans le même ordre que mon exemple, je devrais avoir les item triés de cette façon (item(0)=Clip2 et item(1)=Clip1).

    Ça fait un moment que je cherche et je ne sais pas comment faire.
    Merci beaucoup si vous pouvez m'aider.

    EDIT : La clé nommée peut aussi être FrameBegin ou "Clip" suivi de FrameBegin (ex: Clip1200) si ça peut simplifier les choses.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Je crois que j'ai trouvé :
    Permet de retrouver la clé à partir de l'index avec Items.GetKey(index).
    SortedList (Of Key, Value) ne permet pas d'accéder à un élément à partir de son index.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    SortedList (Of Key, Value) ne permet pas d'accéder à un élément à partir de son index.
    Utilises les propriétés SortedList.Keys[index] ou SortedList.Values[index] pour lire l'élément et la methode SortedList.SetByIndex(Value) pour modifier la Value d'un elément.
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonjour et merci de me répondre mais je commence à me noyer Si quelqu'un peut m'aider à écrire ma classe ça serait sympa.
    clsDataVideo sert à stocker tous les objets relatif à la video et qui doit pouvoir être serialisé.
    clsVideoEditCut contient la liste des points de coupure.
    Cuts contient les 2 points de coupure CutBegin et CutEnd.

    Utilises les propriétés SortedList.Keys[index] ou SortedList.Values[index] pour lire l'élément et la methode SortedList.SetByIndex(Value) pour modifier la Value d'un elément.
    J'ai essayé avec les SortedList (of) mais je ne suis pas arrivé a faire ce que je voulais comme par exemple accéder directement à la valeurs d'un élément avec une syntaxe simple. (Par exemple, pour lire la Valeur FrameBegin à l'aide de l'index du style item(0).FrameBegin ou à l'aide la clé GetValue(1500).FrameEnd.
    J'ai écrit la classe suivante qui s'approche le plus à ce que je voudrais mais je n'ai pas pu l'essayer : quand je l'utilise j'ai une erreur "objet non instancié" sur cette ligne : If Not _VideoEditCut.ContainsKey(FrameBegin) Then.

    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
    <Serializable()>
    Public Class clsDataVideoEdit
        Private _VideoEditCut As clsVideoEditCut
        Public Sub New()
            _VideoEditCut = New clsVideoEditCut
        End Sub
        Public Sub Clear()
            _VideoEditCut = Nothing
        End Sub
        Public Property VideoEditCut As clsVideoEditCut
            Get
                Return _VideoEditCut
            End Get
            Set(ByVal value As clsVideoEditCut)
                _VideoEditCut = value
            End Set
        End Property
    End Class
     
    Public Class clsVideoEditCut
        Private _VideoEditCut As SortedList
        Private _Compteur As Integer
        Public Sub New()
            _VideoEditCut = New SortedList
        End Sub
        Public Sub Clear()
            _VideoEditCut = Nothing
            _Compteur = 0
        End Sub
        Public Property Items As SortedList
            Get
                Return _VideoEditCut
            End Get
            Set(ByVal value As SortedList)
                _VideoEditCut = value
            End Set
        End Property
        Public Property KeyValue(Key As Integer) As Cuts
            Get
                Return CType(_VideoEditCut.Item(Key), Cuts)
            End Get
            Set(ByVal value As Cuts)
                _VideoEditCut.Item(Key) = value
            End Set
        End Property
        Public Property Item(index As Integer) As Cuts
            Get
                Dim Key As Integer = CInt(_VideoEditCut.GetKey(index))
                Return CType(_VideoEditCut.Item(Key), Cuts)
            End Get
            Set(ByVal value As Cuts)
                Dim Key As Integer = CInt(_VideoEditCut.GetKey(index))
                _VideoEditCut.Item(Key) = value
            End Set
        End Property
        Public Sub Add(FrameBegin As Integer)
            Dim _Cuts As New Cuts(FrameBegin, _Compteur)
            If Not _VideoEditCut.ContainsKey(FrameBegin) Then
                _VideoEditCut.Add(FrameBegin, _Cuts)
                '_VideoEditCut.Item(FrameBegin).Id = _Compteur ' _VideoEditCut.IndexOfKey(FrameBegin)
                _Compteur += 1
            Else
                Throw New Exception("Le Clip existe déja !")
                Exit Sub
            End If
        End Sub
        Public Sub Add(FrameBegin As Integer, FrameEnd As Integer)
            Dim _Cuts As New Cuts(FrameBegin, _Compteur)
            '_Cuts.FrameBegin = FrameBegin
            _Cuts.FrameEnd = FrameEnd
            If Not _VideoEditCut.ContainsKey(FrameBegin) Then 
                _VideoEditCut.Add(FrameBegin, _Cuts)
                '_VideoEditCut.Item(FrameBegin).Id = _Compteur ' _VideoEditCut.IndexOfKey(FrameBegin)
                _Compteur += 1
            Else
                Throw New Exception("Le Clip existe déja !")
                Exit Sub
            End If
        End Sub
     
        Public Class Cuts
            Private _Text As String
            Private _Id As Integer
            Private _FrameBegin As Integer
            Private _FrameEnd As Integer
            Public Sub New(FrameBegin As Integer, Id As Integer)
                _FrameBegin = FrameBegin
                _Id = Id
                '_Text = "Clip" & FrameBegin
                _Text = "Clip" & _Id
            End Sub
            Public ReadOnly Property FrameBegin As Integer
                Get
                    Return _FrameBegin
                End Get
                'Set(ByVal value As Integer)
                '    _FrameBegin = value
                'End Set
            End Property
            Public Property FrameEnd As Integer
                Get
                    Return _FrameEnd
                End Get
                Set(ByVal value As Integer)
                    _FrameEnd = value
                End Set
            End Property
            Public Property Text As String
                Get
                    Return _Text
                End Get
                Set(ByVal value As String)
                    _Text = value
                End Set
            End Property
            'Public Property Id As Integer
            '    Get
            '        Return _Id
            '    End Get
            '    Set(ByVal value As Integer)
            '        _Id = value
            '        _Text = "Clip" & _Id & Convert.ToChar(Keys.Tab) & " - Début: " & FrameBegin & Convert.ToChar(Keys.Tab) & " Fin: " & FrameEnd
            '    End Set
            'End Property
        End Class
    End Class

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    J'ai trouvé mon problème :
    J'ai oublié de supprimer une ligne de code dans mon programme :
    Celle-ci réinitialisait l'objet _VideoEditCut=Nothing en appelant la méthode clsVideoEditCut.Clear.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Décidément cette classe me pose de gros problème, cette fois je m'appercois que tous les objets de ma sortedList sont identique
    Voici comment je procede :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim DataVideoEdit as New clsDataVideoEdit
     
    Dim Cuts as new Cuts
    Cuts.FrameBegin = 1000
    Cuts.EndEdit = 1500
    DataVideoEdit.VideoEditCut.add(CutsClip)
    Cuts.FrameBegin = 2000
    Cuts.EndEdit = 2500
    DataVideoEdit.VideoEditCut.add(CutsClip)
    Tous mes objets Cuts contenue dans ma SortedList prennent la valeur 2000 et 2500 !!

    J'ai ajouter ceci dans ma 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
    Public Sub Add(ByVal CutsClip As CutsClip)
                Dim _Cuts As New CutsClip
                _Cuts = CutsClip
                _Cuts.Name = "Clip" & _Compteur.ToString
                Dim FrameBegin = _Cuts.FrameBegin
                Dim FrameEnd = _Cuts.FrameEnd
                If Not _VideoEditCut.ContainsKey(FrameBegin) Then
                    _VideoEditCut.Add(FrameBegin, _Cuts)
                    '_VideoEditCut.Item(FrameBegin).Id = _Compteur ' _VideoEditCut.IndexOfKey(FrameBegin)
                    _Compteur += 1
                Else
                    Throw New Exception("Le Clip existe déja !")
                    Exit Sub
                End If
            End Sub

  7. #7
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    J'ai trouvé :
    _Cuts = CutsClip crée une référence entre les 2 objets.

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

Discussions similaires

  1. quel type d'entrée pour un cours?
    Par melreg dans le forum Bibliographies - Index - Glossaires
    Réponses: 0
    Dernier message: 01/04/2009, 16h48
  2. [WPF] Problème de binding entre une SortedList et une ListBox
    Par JuTs dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 10/12/2007, 13h20
  3. Quels types de projets réalisez vous avec .NET
    Par Louis-Guillaume Morand dans le forum Général Dotnet
    Réponses: 106
    Dernier message: 03/12/2007, 18h44
  4. Quel type de BDD dans mon cas
    Par zoubidaman dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 10/06/2004, 18h00
  5. Probème de type entre access et delphi
    Par samlerouge dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/05/2004, 19h56

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