1. #1
    Membre régulier Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    février 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : février 2012
    Messages : 106
    Points : 79
    Points
    79

    Par défaut Récupération de données d'un tableau

    Bonjour à tous, et bonne année 2018, et surtout bonne santé !

    Alors voilà, cela faisait longtemps que je n'avais pas mis les mains dans mon appli d'émulation de jeux vidéo, et voilà que j'ai voulu améliorer la bête ... encore une fois !

    Du coup, pour afficher les jeux disponibles pour une console (contenus dans un dossier), je les listais dans une listbox (normal quoi !). Puis je me suis dis que ce serait super de pouvoir filtrer les résultats au fur et à mesure qu'on taperait des lettres dans un textbox ... ouais super idée ! Sauf que je n'ai rien trouvé de génial à ce niveau là. Je ne parvenais pas à filtrer en temps réel. Du coup je cherche, et ho ! une solution existe, mais il faut utiliser une datatable. Du coup, pour chaque console, j'utilise une fonction comme celle-ci :

    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
    Private Function getdata_ATARI7800() As DataTable
     
            lst_roms.Items.Clear() 'On vide la listbox
     
            dtGames = New DataTable() 'On crée une nouvelle datatable
     
            dtGames.Columns.Add("Jeu", GetType(String)) 'On crée une colonne jeu
     
            cheminconsole = chemin + "\ROMS\ATARI7800\" 'On définit le chemin au dossier dans "cheminconsole"
            Dim files = My.Computer.FileSystem.GetFiles(cheminconsole, FileIO.SearchOption.SearchAllSubDirectories, "*.*") 'On récupère tous les noms de fichiers
            For Each rom As String In files
                If rom.EndsWith(".a78") Then
                    resultat = IO.Path.GetFileName(rom)
                    dtGames.Rows.Add(resultat) 'Et là on rajoute une ligne au tableau pour chaque fichier trouvé dans le dossier
                End If
            Next
            If files.Count = 0 Then
                MsgBox("Il n'y a actuellement aucun fichier rom pour cet émulateur." & vbCrLf & vbCrLf & "Téléchargez-en et ajoutez-les à EmuWare pour peupler la liste des roms.", vbOKOnly + vbInformation, "Aucune rom détectée !")
            End If
     
            Return dtGames 'Et enfin on renvoie tout ça
     
        End Function
    Jusque là, tout marche nickel, ma fonction de recherche en temps réel fonctionne du tonnerre ... Mais c'est lorsque je veux exécuter un jeu que tout se corse. À l'époque où je n'utilisais qu'un listbox tout fonctionnait avec ceci :

    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
    If cmb_console.SelectedIndex = 0 Then 'C'est le choix de la console fait dans un menu déroulant
     
                'On vérifie que l'élément existe bien sur le disque dur
                Dim fichier As String
                fichier = lst_roms.SelectedItem.ToString() '********** Et c'est là que ça foire, car il saute direct au else ***********
                If My.Computer.FileSystem.FileExists(rom_path + "ATARI7800\" + fichier) = True Then
     
                    'Si OUI, alors on lance le jeu
                    Process.Start(emu_path & "ATARI7800\ProSystem.exe", "-Fullscreen 1 -MenuEnabled 0 -Zoom 2 " & """" & rom_path & "ATARI7800\" & fichier & """")
                    cle_path.Close()
                    'Si NON, alors on affiche un message d'erreur
                Else
     
                    Dim reponse As MsgBoxResult
                    reponse = MsgBox("Le fichier sélectionné n'existe pas ou plus sur le disque dur." & vbCrLf & vbCrLf & "La liste des fichiers va être rafraîchie automatiquement.", vbOKOnly + vbExclamation, "Fichier inexistant !")
                    If reponse = vbOK Then
     
                        'On rafraîchit la listbox des roms
                        lst_roms.Items.Clear()
                        Dim files = My.Computer.FileSystem.GetFiles(cheminconsole, FileIO.SearchOption.SearchAllSubDirectories, "*.*")
                        For Each rom As String In files
                            resultat = IO.Path.GetFileName(rom)
                            lst_roms.Items.Add(resultat)
                            cle_path.Close()
                        Next
                    End If
                End If
            End If
    Cela ne fonctionne plus (ligne 5), au lieu de lire l'item comme il apparait dans la listbox, et de le mettre dans la variable fichier, il donne a la variable fichier ceci comme valeur :

    Nom : Sans titre-3.png
Affichages : 58
Taille : 2,6 Ko

    Voilà, j'espère que mes explication étaient claires. Si quelqu'un sait comment gérer ça, car là je vois pas comment faire. J'ai pas vraiment appris à manipuler des tableaux, et je galère grave. Car dans le listbox le nom de la rom apparaît très bien comme : "Sonic 3.bin" par exemple. Mais quand je veux récupérer cette valeur, j'obtiens ce qu'il y a dans la msgbox en image au-dessus.

    Merci d'avance à ceux qui pourront m'aider !

    Cordialement-

  2. #2
    Membre régulier Avatar de Shennong
    Homme Profil pro
    Technicien Informatique/Hotliner
    Inscrit en
    février 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Informatique/Hotliner
    Secteur : Santé

    Informations forums :
    Inscription : février 2012
    Messages : 106
    Points : 79
    Points
    79

    Par défaut

    Je ne me souvenais plus, mais c'est même encore plus complexe que ce dont je me rappelais.

    Effectivement, les données du Dataview créé sont envoyé au Listbox.DataSource.

    Donc en fait c'est à partir de là, que le listbox est peuplé. Donc c'est à partir de là qu'il faut essayer de manipuler les données apparaissant dans le listbox. Mais je ne vois toujours pas comment récupérer le texte de ce qui est sélectionné dans la listbox comme ça. J'ai toujours le même résultat dans le msgbox ...

  3. #3
    Membre expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    octobre 2008
    Messages
    1 651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 651
    Points : 3 423
    Points
    3 423
    Billets dans le blog
    6

    Par défaut

    Bonsoir,

    Pour pouvoir récupérer la valeur associée au Datatable de ton ListBox alors il faut affecter le nom adequat à la propriété "DisplayMember" ou "ValueMember", à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    lst_roms.DisplayMember = "Jeu"
    lst_roms.DataSource = getdata_ATARI7800()

    Pour pouvoir récupérer la valeur lors de la sélection d'un élément dans le ListbOx :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Private Sub lst_roms_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lst_roms.SelectedIndexChanged
            MsgBox(lst_roms.SelectedItem("Jeu"))
        End Sub
    PS : Il faut être conscients de la manière dont tu stockes tes données (= Datatable). Le nom de la colonne est "Jeu" donc pour pouvoir récupérer toutes les valeurs de cette colonne "Jeu" il faut l'interroger grâce à son nom, il n'y a pas d'autres options !

    A+

Discussions similaires

  1. Récupération de données dans un tableau
    Par spad22 dans le forum Excel
    Réponses: 8
    Dernier message: 14/12/2007, 11h58
  2. Récupération de données d'un tableau (sans BDD)
    Par Marie69 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 30/10/2007, 10h27
  3. Méthode Find pour récupération de données dans un tableau
    Par clem.villeneuve dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2007, 15h26
  4. Récupération de données d'un tableau
    Par axou1er dans le forum PHP & MySQL
    Réponses: 2
    Dernier message: 26/02/2007, 13h11
  5. [Tableaux] Récupération de données dans un tableau
    Par ctrl+z dans le forum Fonctions
    Réponses: 2
    Dernier message: 02/08/2006, 15h11

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