Appel de listbox dans une autre class

Messages postés
7
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
17 juin 2012
- - Dernière réponse : Whismeril
Messages postés
14039
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 décembre 2019
- 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.
Afficher la suite 

4 réponses

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
0
Merci
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...
Commenter la réponse de cormandyr
Messages postés
14039
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 décembre 2019
324
0
Merci
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
Commenter la réponse de Whismeril
Messages postés
7
Date d'inscription
mercredi 18 janvier 2012
Statut
Membre
Dernière intervention
17 juin 2012
0
Merci
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.
Commenter la réponse de chrisARA
Messages postés
14039
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 décembre 2019
324
0
Merci
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
Commenter la réponse de Whismeril