Appel de listbox dans une autre class

chrisARA Messages postés 7 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 17 juin 2012 - 22 févr. 2012 à 23:24
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 - 23 févr. 2012 à 13:00
Bonsoir a tous,
je suis en cours de réalisation d'un lecteur mp3, composé d'un formulaire lecteur et d'un deuxieme formulaire playlist.Dans ma Class lecteur j'ai une procedure recher_playlist() qui me permet de remplir la listbox des playlist.

Mon problème est quand j'appelle cette procédure dans mon autre classe Playlists elle ne m'affiche pas les Playlists trouvée dans la listbox alors que la procédure est bien lancée depuis la classe. j'ai pourtant bien modifier la propriéte "modifiers" a PUBLIC de ma listbox.

Je galére sur ce problème depuis plusieurs heures.

Class lecteur
{
//

public void recherche_playlist()
{

listBox_playlist.Items.Clear();

DirectoryInfo chemin_playlit = new DirectoryInfo(Application.StartupPath + @"\playlist");
FileInfo[] info = chemin_playlit.GetFiles("*.txt"); //recherche de fichier Txt dans repertoire playlit
int i = 0;
foreach (FileInfo playlist in info)
{
tab_playlist[i] = new playlist(playlist.FullName, playlist.Name);// creation de l'objet playlist et ajout dans le tableau de playlist
//listBox_playlist.Items.Add(playlist.Name);
listBox_playlist.Items.Add(playlist.Name);
//MessageBox.Show(playlist.Name);
i++;
}
}
}


class playlist
{
lecteur lect = lecteur();

if (text_playlist.Text == "")
{
MessageBox.Show("vous devez donner un nom a la playlist");
}
else
{
try
{
string chemin_playlist = Application.StartupPath + @"\playlist" + text_playlist.Text + ".txt";
FileStream playlist = new FileStream(chemin_playlist, FileMode.Create);
using (StreamWriter sw = new StreamWriter(playlist))
{
foreach (string fi in listBox1.Items)
{
sw.WriteLine(fi);
}
sw.Close();
}
lect.recher_playlist();


}
catch (Exception exx)
{
MessageBox.Show(exx.ToString());
}
}
}

}

le probleme est que la listbox ne se réactualise pas.
Merci d'avance pour vos réponses.

4 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
23 févr. 2012 à 08:42
Si je te dis que la visibilité peut être mise sur des variables, des méthodes ou des classes/interfaces et que meme si une méthode ou une variable sont public, la visibilité de la classe/interface doit aussi etre telle qu'on puisse la voir...
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
23 févr. 2012 à 09:28
Bonjour quel éditeur utilises tu, car chez moi dans le copié/collé de ton code, tout est souligné en rouge!

Avec les balise de code, (3eme icone en partant de la droite au dessus de la zone de saisie du texte):
voir mes commentaires :
Class lecteur //class s'écrit en minuscule
{ 
// 

public void recherche_playlist() 
{ 

listBox_playlist.Items.Clear(); 

DirectoryInfo chemin_playlit = new DirectoryInfo(Application.StartupPath + @"\playlist"); 
FileInfo[] info = chemin_playlit.GetFiles("*.txt")
int i = 0; 
foreach (FileInfo playlist in info) 
{ 
tab_playlist[i] = new playlist(playlist.FullName, playlist.Name);
listBox_playlist.Items.Add(playlist.Name); //tu veux ajouter playlist.Name, mais playlist n'existe pas, tab_playlist[i] oui.
//au passage l'utilisation de tableau pose le problème de savoir à l'avance le nombre d'entrée, il est plus souple d'utiliser une List<T>.
MessageBox.Show(playlist.Name); //idem playlist n'existe pas.
i++; 
} 
} 
} 



et là c'est encore mieux:

class playlist 
{ 

//comment peux tu écrire du code, tu n'as même pas ouvert une méthode ou un constructeur de ta classe?
lecteur lect = lecteur(); 

if (text_playlist.Text == "") 
{ 
MessageBox.Show("vous devez donner un nom a la playlist"); 
} 
else 
{ 
try 
{ 
string chemin_playlist = Application.StartupPath + @"\playlist" + text_playlist.Text + ".txt"; 
FileStream playlist = new FileStream(chemin_playlist, FileMode.Create); 
using (StreamWriter sw = new StreamWriter(playlist)) 
{ 
foreach (string fi in listBox1.Items) 
{ 
sw.WriteLine(fi); 
} 
sw.Close(); 
} 
lect.recher_playlist(); 


} 
catch (Exception exx) 
{ 
MessageBox.Show(exx.ToString()); 
} 
} 
} 



Commence par régler ces petits points.
Et si ça coince toujours, remets ton code corrigé, avec les balises s'il te plait
Whismeril
0
chrisARA Messages postés 7 Date d'inscription mercredi 18 janvier 2012 Statut Membre Dernière intervention 17 juin 2012
23 févr. 2012 à 12:29
Bonjour,

Merci de vos réponse rapide.
Comme éditeur j'utilise visual studio 2010 ultimate , je pense que tu as toutes ces erreurs car je n'ai mis qu'un exemple de bout de code et pas tous le reste, et donc il ne reconnait pas le tout.

Pour ce qui est de la visibilité, je l'ai bien compris vue que toutes mes classes sont en public je peut y accéder. J'y appelle la méthode recherche_playlist de ma classe lecteur, le tout depuis la classe Playlists, et la procédure est bien exécute, le seul hic c'est que ça coince au niveau de la listbox(de la classe lecteur).

P.S je n'ai aucune erreur dans mon compilateur.
0
Whismeril Messages postés 19035 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 6 mai 2024 656
23 févr. 2012 à 13:00
Comme tu ne mets que des bouts de code, comment veux tu que l'on s'en sorte?

Il n'en reste pas moins que
listBox_playlist.Items.Add(playlist.Name);

ajoute un playlist qui ne correspond à rien.


Whismeril
0
Rejoignez-nous