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 :
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 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
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 :
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
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-
Partager