locked
mise à jour d'une combobox sur un formulaire à partir d'un second formulaire RRS feed

  • Question

  • Bonjour!

    Je suis en train de faire une application dans le cadre de mon BTS et j'ai beaucoup de mal avec le C#!
    Je cherche à mettre à jour une combobox située dans un formulaire à partir d'une information saisie dans un autre formulaire.
    Je m'explique:
    j'ai un formulaire qui contient une combobox dont le contenu est une liste de clients extraite d'un fichier texte. Ca marche sans problème. J'ajoute un nouveau client grace à un second formulaire et lorsque je valide ma saisie, le client est bien ajouté à mon fichier texte mais je ne sais pas comment mettre à jour ma combobox sur le premier formulaire.
    J'ai crée une méthode pour charger les informations contenues dans mon fichier texte:
      public void cmbClient_Chargement()
            {
                const string mesClients = @"monRep\client\lesClients.txt";
                string ligne;
                if (File.Exists(mesClients))
                {
                    StreamReader ficIn;
                    ficIn = File.OpenText(mesClients);
                    ligne = ficIn.ReadLine();
                    while ((ligne = ficIn.ReadLine()) != null)
                    {
                        cmbListeCli.Items.Add(ligne);
                    }
                    ficIn.Close();
                }
            }

    elle est contenue dans le code de mon premier formulaire et je ne sais pas si je peux l'appeler dans le code de mon second formulaire.
    Pourriez vous m'aider???
    Merci d'avance
    jeudi 11 juin 2009 13:25

Réponses

  • En c#, depuis ta form1 :

    using (Form2 form2 = new Form2())
    {
            form2.ShowDialog(this); // ouverture modal
    
            this.cmbClient_Chargement(); //
    
    } // dispose form 2 effectué
    Note l'utilisation du "using" qui te permet de t'assurer de disposer ta form2

    Pour recharger tes données tu peux rappeler ta fonction cmbClient_Chargement() ( qui peut donc rester privée )
    en prenant soin de vider ta combobox au début  avec : this.cmbListeCli.Items.Clear();

        public void cmbClient_Chargement()
        {
          const string mesClients = @"monRep\client\lesClients.txt";
          string ligne;
          if (File.Exists(mesClients))
          {
            using (StreamReader ficIn = File.OpenText(mesClients))
            {
              // clear item
              cmbListeCli.Items.Clear();
    
              ligne = ficIn.ReadLine();
              while ((ligne = ficIn.ReadLine()) != null)
              {
                cmbListeCli.Items.Add(ligne);
              }
            }
          }
        } 
    
    Note aussi ici l'utilisation du "using" sur le StreamReader : ceci t'assure que le flux sera toujours disposer qu'une exception survienne ou non

     

     

     



    • Modifié nikho vendredi 12 juin 2009 11:59
    • Marqué comme réponse Gilles TOURREAU dimanche 28 juin 2009 19:48
    vendredi 12 juin 2009 08:37

Toutes les réponses

  • Bonjour,

    Votre méthode étant déclarée comme publique vous pouvez l'appelez à partir de votre second formulaire (pour autant que le premier ne soit pas supprimé).

    Maintenant pourquoi ne pas créer un fonction (ou mieux une propriété) dans votre second formulaire qui renvoi la ligne que vous voulez ajouter. Il vous suffit alors d'utiliser le code suivant à partir de votre formulaire 1 pour ouvrir le second formulaire.

    (vous pouvez vous inspirer de ce code en VB)

                    Dim frm2 As New formulaire2  ' Instancie le formulaire
                    frm2.Owner = Me                   ' Déclare son parent (optionel)
                    frm2.ShowDialog()                 ' Affiche le formulaire
                   ligne = frm2.ligne                    ' Récupère la ligne

    Après, vous ajoutez la ligne à votre combobox
    jeudi 11 juin 2009 14:32
  • En c#, depuis ta form1 :

    using (Form2 form2 = new Form2())
    {
            form2.ShowDialog(this); // ouverture modal
    
            this.cmbClient_Chargement(); //
    
    } // dispose form 2 effectué
    Note l'utilisation du "using" qui te permet de t'assurer de disposer ta form2

    Pour recharger tes données tu peux rappeler ta fonction cmbClient_Chargement() ( qui peut donc rester privée )
    en prenant soin de vider ta combobox au début  avec : this.cmbListeCli.Items.Clear();

        public void cmbClient_Chargement()
        {
          const string mesClients = @"monRep\client\lesClients.txt";
          string ligne;
          if (File.Exists(mesClients))
          {
            using (StreamReader ficIn = File.OpenText(mesClients))
            {
              // clear item
              cmbListeCli.Items.Clear();
    
              ligne = ficIn.ReadLine();
              while ((ligne = ficIn.ReadLine()) != null)
              {
                cmbListeCli.Items.Add(ligne);
              }
            }
          }
        } 
    
    Note aussi ici l'utilisation du "using" sur le StreamReader : ceci t'assure que le flux sera toujours disposer qu'une exception survienne ou non

     

     

     



    • Modifié nikho vendredi 12 juin 2009 11:59
    • Marqué comme réponse Gilles TOURREAU dimanche 28 juin 2009 19:48
    vendredi 12 juin 2009 08:37