Partage
  • Partager sur Facebook
  • Partager sur Twitter

ZBiblio

po compris sniff!!

    11 juillet 2011 à 13:44:24

    Bonjour à tous.

    Alors voila j'essaye de comprendre la solution de ZBiblio et j'ai un petit problème dans la partie que effectue a recherche.

    For Each FilmALister As Film In _ListeFilms
    
                If Me.TXT_TITRE.Text <> "" Then
                    If FilmALister.Nom.Contains(Me.TXT_TITRE.Text) Then
                        Me.LB_LISTE_FILMS.Items.Add(FilmALister)
                    End If
                End If
    
                If Me.DDL_ACTEUR.Text <> "" Then
                    If FilmALister.Acteurs.Contains(Me.DDL_ACTEUR.Text) Then
                        Me.LB_LISTE_FILMS.Items.Add(FilmALister)
                    End If
                End If
    
                If Me.DDL_ANNEE.Text <> "" Then
                    If CDate(FilmALister.DateSortie).Year = Me.DDL_ANNEE.Text Then
                        Me.LB_LISTE_FILMS.Items.Add(FilmALister)
                    End If
                End If
    
                If Me.DDL_GENRE.Text <> "" Then
                    If FilmALister.Genre1.Contains(Me.DDL_GENRE.Text) Or FilmALister.Genre2.Contains(Me.DDL_GENRE.Text) Then
                        Me.LB_LISTE_FILMS.Items.Add(FilmALister)
                    End If
                End If
    
                If Me.DDL_REALISATEUR.Text <> "" Then
                    If FilmALister.Realisateur.Contains(Me.DDL_REALISATEUR.Text) Then
                        Me.LB_LISTE_FILMS.Items.Add(FilmALister)
                    End If
                End If
    
            Next
    



    En effet selon moi le programme va effectuer toutes les IF(puisque pas de else) et par conséquent si l'utilisateur a remplit plusieurs case de recherche (par exemple auteur et titre), le film apparaîtra deux fois dans la liste. En effet, Le programme va d'abord constater que le tire recherché correspond à un film de la collection, puis ensuite une fois arrivé au test de l'auteur il constate que l'auteur correspond aussi au film, il ajoute alors à nouveau le film à la liste ce qui en fait deux au lieu d'un?


    Ai-je bien compris le programme et si oui pourquoi fait-on cela?

    Merci d'avance à tous les zéros ;)
    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2011 à 14:09:17

      Logiquement, oui tu as raison. Je n'ai pas testé mais vu le source ça doit être clair. A moins que la méthode Add n'ajoute pas si l'élément est déjà dans la liste (ce qui m'étonnerait).

      Je pense qu'il faudrait faire des if/elseif, ou des return (plus "joli" mais moins rigoureux)
      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2011 à 14:27:54

        Hello

        Merci de ta réponse.

        Alors pour ce qui est du add, il ne vérifie rien j'ai testé j'ai donc suivi l'idée du elsif

        Encore une petite chose pourquoi __Filmenvisualisation n'as pas besoin d'être instancié alors que _ListeFils doit être instancié.

        http://www.siteduzero.com/tutoriel-3-3 [...] tml#ss_part_2

        Désolé la réponse est surement simple mais je débute avec la POO et j'ai encore ce genre de "BUGS".. :euh:

        Merci à tous d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          11 juillet 2011 à 14:42:36

          Bah il est instancié non?

          Private _FenetreAjout As AjoutEditionFilm
          Private _FilmEnVisualisation As Film
          Private _ListeFilms As List(Of Film)
          
          • Partager sur Facebook
          • Partager sur Twitter
            11 juillet 2011 à 14:55:51

            Mais pour instancier il aurait pas fallu faire "new" en plus? Comme c'est le cas pour Listefilms plus loin dans le code? :o
            • Partager sur Facebook
            • Partager sur Twitter
              11 juillet 2011 à 15:04:23

              Oups, j'ai regardé en diagonale, j'aurais pas du te montrer ce code mais celui ci :

              If FilmALister.Nom = LB_LISTE_FILMS.SelectedItem.ToString Then
              'L'insère dans une variable globale
              Me._FilmEnVisualisation = FilmALister
              End If
              


              En fait (et si j'ai bien regardé), on affecte une variable Film à la variable _FilEnVisualisation dès le début. Donc il est tout de même instancié, puisqu'il sera identique à "FilmALister". (En fait c'est une histoire d'adresse mémoire, on lui donne directement une adresse déjà existante, donc on a pas besoin d'en créer une (ce que le New fait)).
              • Partager sur Facebook
              • Partager sur Twitter
                11 juillet 2011 à 15:18:30

                D'accord je pense comprendre. En fait Comme FilmALister contient déjà un objet de type film, on peut mettre cette objet dans _FilmEnVisualisation. Ce qui signifiait que l'instanciation ne sert qu'à créer un objet pour qu'on puisse remplir une variable du type de cette objet?
                • Partager sur Facebook
                • Partager sur Twitter
                  11 juillet 2011 à 15:55:03

                  L'instanciation sert à créer un objet en mémoire pour ensuite manipuler ses méthodes et ses propriétés. S'il n'est pas instancié il y aura une erreur, parce qu'il pourra pas utiliser la méthode/propriété. Comme dans ce cas on affecte FilmALister dans _FilmEnVisualisation, il n'y a pas de problème :)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 juillet 2011 à 16:09:26

                    Donc au lieu de créer un nouvel objet qu'on affecterai à _FilmEnVisualisation, on l'instancie en lui affectant un objet déjà existant soit FilmALister?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 juillet 2011 à 16:21:51

                      Voilà :)
                      Si tu aurais fait le New, et qu'après tu aurais affecté FilmALister, tu aurais alloué une adresse mémoire pour rien, vu que FilmALister est déjà présent.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 juillet 2011 à 16:32:16

                        OK merci

                        Une dernière petit chose Pourquoi affecte on une méthode (ADD) à la propriété publique ListFilms?

                        En effet habituellement, on ferait zbiblio.ListFilms= (Quelquechose), mais la on fait zbiblio.Listfilms.add(monfilm). Comment est-ce possible. Ne faudrait-il pas affecter un collection de films à cette propriété au lieu d'une méthode (ADD)
                        Private Sub BT_SAVE_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_SAVE.Click
                        
                                If _FilmAModifier Is Nothing Then
                                    'Enregistre notre film
                                    Dim MonFilm As New Film(Me.TXT_NOM.Text, Me.DT_DATE_SORTIE.Value, Me.DDL_REALISATEUR.Text, Me.DDL_GENRE1.Text, Me.DDL_GENRE2.Text, Me.TXT_ACTEURS.Text, Me.TXT_SYNOPSIS.Text, Me.TXT_AVIS_PERSONNEL.Text, Me.NUM_NOTE.Value)
                                    'On l'ajoute à la liste
                                    ZBiblio.ListeFilms.Add(MonFilm)
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 juillet 2011 à 16:43:06

                          Je suppose que la variable ListeFilms est de type List. En gros ce type est le même principe qu'un tableau, mais en plus évolué (pas de gestion de tri à faire par exemple). Donc comme ListeFilms contient un ensemble d'objets de type Film, on ajoute un nouveau film dans cette liste par la méthode Add pour le placer dans le tableau. Si tu n'a pas compris hésite pas à me le dire :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 juillet 2011 à 16:52:26

                            Si je devais te payer toute l'aide que tu m as apporté, il faudrait que je prenne un crédit.. :p

                            Alors le add j'ai compris mais l'affectation se fait où je m'attentait à quelque chose du genre

                            Variabledetypelist=zbiblio.ListeFilms

                            Variabledetypelist.add(monfilm)

                            zbiblio.ListeFilms=Variabledetypelist
                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 juillet 2011 à 17:33:40

                              Public Property ListeFilms As List(Of Film)
                                      Get
                                          Return _ListeFilms
                                      End Get
                                      Set(ByVal value As List(Of Film))
                                          _ListeFilms = value
                                      End Set
                                  End Property
                              


                              Voilà plus en détail ListeFilms. ListeFilms est une propriété de la fenêtre. Mais c'est le même objet que _ListeFilms :)

                              Si tu n'en sais pas plus sur l'histoire des Get/Set, dis le moi :)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 juillet 2011 à 17:40:31

                                En réalité je pensait que lorsque tu affecte une valeur à la propriété, le programme sautait à set et donc mettait Value dans _ListeFilms et que lorsqu'on demande quelque chose à cette propriété le programme saut à GET et fournit __ListeFilms.

                                C'est pour cette raison qu'avant d'ajouter une élément à la liste d'élément je voulais l'obtenir par :
                                Variabledetypelist=zbiblio.ListeFilms. A ce moment la j'obtiendrai ma liste de films dans la variable temporaire et je pourait y ajouter un élément.

                                Ensuit, je pensait envoyer à la propriété qui elle transmettrait à _ListeFilm la liste avec un élément de plus

                                Je suis à côté de la plaque ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 juillet 2011 à 20:08:02

                                  Non tu n'es pas à coté de la plaque, c'est ça. Mais si tu peux, plutot que de transmettre à _ListeFilm une liste complète, utilise la méthode Add pour ajouter un élément, ça évitera de stocker encore un tableau en mémoire (enfin si tu peux, je ne sais pas trop ton cas ^^)
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    11 juillet 2011 à 22:25:24

                                    Ok en fait je ne savait pas qu'on pouvait ajouter un element en passant par la propriété au lieu de passer par la collection mais comme tu l'as dit je dois considérer que l'un ou l autre c est la même chose.

                                    Est-ce comme un pointeur en C (J'ai fait pas mal de C mais de bas niveau --> microcontroleur)

                                    En fait si je comprend bien c'est comme si j'avais créer directement une variable global. J'aurais dans ce cas pu éviter d'avoir une variable local ainsi qu'une collection?
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      11 juillet 2011 à 22:34:20

                                      Oui, il me semble que oui (mes années de VB remonte :p). En fait ta collection c'est ta variable ^^ mais oui t'aurais pu éviter de passer par une variable local, mais bon comme elle est destinée a être manipulée par les autres c'est mieux de la mettre en tant que propriété publique du formulaire (ce que l'auteur du tutoriel a fait visiblement)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        11 juillet 2011 à 22:37:42

                                        Un grand merci pour tes éclaircissement, je cherche vraiment à comprendre ce VB.NET car j'en ai besoin pour mes études, donc au final mon but était simplement de comprendre et je te remercie pour toute ton aide j'éspère que tu rode souvent pas là ^^
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          11 juillet 2011 à 22:42:28

                                          De temps en temps pour faire une "pause" pendant mon stage (donc plusieurs fois par jour),mais bon tu peux m'envoyer des M.P. si tu veux d'autres informations :)
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          ZBiblio

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown