Acceder a une ListBox a partir d'une autre form avec une classe

Signaler
Messages postés
4
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 mai 2013
-
Messages postés
4
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 mai 2013
-
Bonjour,

J'aurais besoin d'un petit coup de main svp :)

Enfaite j'ai une form principal "AppliMainForm" ou se trouve une Listbox "listVille" et je voudrais a partir d'une classe que j'ai créée "XMLVille" créer une méthode "ChargementListe" qui me charge ma Listbox avec les élements de mon fichier XML..

J'arrive a faire le chargement de ma listebox dans le programme principal mais dès que j'essaye avec ma méthode "ChargementListe" elle ne se charge plus..
J'ai passé ma ListBox en public, je n'ai pas d'erreur de compilation mais elle reste vide...

voici mon code :

Méthode ChargelentListe de ma class XMLVilles :

public void ChargementListe()
        {
            AppliMainForm form1;
            form1= new AppliMainForm();
           
            tab = new string[50];
            XmlDocument docVille = new XmlDocument();
            docVille.Load(@".\XMLVilles.xml");
            XmlNodeList listeNoeudsVilles = docVille.GetElementsByTagName("nom");
            foreach (XmlNode node in listeNoeudsVilles)
            {
                tab[nbVilles] = node.InnerText;
                nbVilles++;
            }
            form1.listVille.Items.Clear();
            for(int i = 0; i < this.nbVilles; i++)
            {
                form1.listVille.Items.Add(tab[i]);
            }
        }


Utilisation de la méthode :
private void AppliMainForm_Load(object sender, EventArgs e)
        {
            XMLVilles ChL  = new XMLVilles();
            ChL.ChargementListe();
        }



Merci de votre aide :)

5 réponses

Messages postés
4
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 mai 2013

Et je souhaite me servir de cette méthode dans plusieurs form par la suite..
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Ta liste ne se remplie pas tout simplement parce que tu remplis la listBox d'un "autre" AppliMainForm, et non celui qui a appelé la méthode ChargementListe();

Le plus propre, serai que ta méthode ChargementListe() retourne un objet List<string> et que ton formulaire AppliMainForm, remplisse sa propre liste :

public List<string> ChargementListe()
{
    List<string> tab = new List<string>();

    XmlDocument docVille = new XmlDocument();
    docVille.Load(@".\XMLVilles.xml");
    XmlNodeList listeNoeudsVilles = docVille.GetElementsByTagName("nom");
    foreach (XmlNode node in listeNoeudsVilles)
        tab.Add(node.InnerText);

    return tab;
}


Et dans ton formulaire :
private void AppliMainForm_Load(object sender, EventArgs e)
{
    XMLVilles ChL = new XMLVilles();
    List<string> villes = ChL.ChargementListe();

    listVille.Items.Clear();
    foreach(string ville in villes)
       listVille.Items.Add(ville);
}
Messages postés
4
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 mai 2013

Yes merci beaucoup mais enfaite ce que j'ai fais c'est que j'ai directement passé ma ListBox comme paramètre a ma fonction, je pense que c'est la méthode la plus simple ?

Du coup sa me donne sa pour ma fonction :

public void ChargementListe(ListBox listville)
        {           
            tab = new string[50];
            XmlDocument docVille = new XmlDocument();
            docVille.Load(@".\XMLVilles.xml");
            XmlNodeList listeNoeudsVilles = docVille.GetElementsByTagName("nom");
            foreach (XmlNode node in listeNoeudsVilles)
            {
                tab[nbVilles] = node.InnerText;
                nbVilles++;
            }
            listville.Items.Clear();
            for(int i = 0; i < this.nbVilles; i++)
            {
                listville.Items.Add(tab[i]);
            }
        }


et puis dans ma form du coup sa ne change pas j'ai que 2 lignes :

private void AppliMainForm_Load(object sender, EventArgs e)
        {
            XMLVilles ChL = new XMLVilles();
            ChL.ChargementListe(listVille);
        }


Et sa marche, mais si vous avez un meilleur code a me proposer je suis preneur!!

Dailleur je ne comprend pas vraiment ce code :
List<string> tab

Cela signifie que "tab" est un tableau de string?? mais le "List" ? c'est quoi?
Désolé je suis débutant

Merci beaucoup dans tout les cas !
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
List<> c'est une liste templatisée, c'est à dire une liste de n'importe quel objet... tout dépend de ta déclaration

Tu peux déclarer List ou List<Object> ou bien List<TaClass>

Par exemple :
List<Double> mesDoubles = new List<Double>();
mesDoubles.Add( 124D );
mesDoubles.Add( 148D );
mesDoubles.Add( 415.12D );
mesDoubles.Add( 846D );

De cette façon lorsque le compilateur passe sur "mesDoubles[ index ]" il sait qu'il s'agit d'un Double. Contrairement à un ArrayList qui ne gère que des Object (donc obligation de caster)
Messages postés
4
Date d'inscription
lundi 7 février 2011
Statut
Membre
Dernière intervention
24 mai 2013

Ah d'accord :)

Merci beaucoup!