Une instance de classe métier pour plusieurs forms [Résolu]

Signaler
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010
-
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
-
Bonjour,

Je débute en c# et je suis confronté à un problème.
Je suis en train de créer un programme composé de 2 fenêtres et d'une classe métier.
Un évènement sur l'une ou l'autre des fenêtres entraine un traitement sur la classe métier.
Ma question; comment faire pour que les 2 forms travaillent sur la même classe métier ?

Merci d'avance

12 réponses

Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Salut

Je te traduit ton erreur :
"Il y a potentiellement des personnes qui connaissent la méthode 'FichSequentiel2.Fajout.Fajout(...)' sans pouvoir connaître le type FichSequentiel2.Metier.Metier, qui est un de ses paramètres."

Ça fonctionnera certainement si tu mets FichSequentiel2.Metier.Metier en public.

L'autre solution est d'employer le design pattern "Singleton" dont tu trouveras des millions d'exemples sur internet. Ça te permettra d'utiliser le même objet dans plusieurs classes.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -
Messages postés
61
Date d'inscription
dimanche 5 novembre 2000
Statut
Membre
Dernière intervention
24 février 2010

Salut, tu pourrais donner un petit exemple ? histoire de bien cadrer !
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

Un exemple simplifié de ce que je cherche à faire :

class Metier
    {

        public String nomFichier;
    }

public partial class Fsecondaire: Form
    {
        private void leboutonsec_Click(object sender, EventArgs e)
  {
    lelabel.Text = leMetier.nomFichier;
  }
}


 public partial class Fprincipale : Form
    {
      Metier.Metier leMetier = new Metier.Metier();
      leMetier.nomFichier = "toto";

      private void lebouton_Click(object sender, EventArgs e)
        {
            Form form2 = new Fsecondaire();
            form2.Show();
        }
      }
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

Et donc je voudrais que Fsecondaire accède à l'instance de Metier de Fprincipale (je pensais pouvoir éditer mon message ^^)
Messages postés
61
Date d'inscription
dimanche 5 novembre 2000
Statut
Membre
Dernière intervention
24 février 2010

En gros tu veux faire passer ton objet de la form1 à la form2 ?
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

Oui voilà.
J'ai essayé de le faire passer par la constructeur (Form form2 new Fsecondaire(unMetier); puis, dans le constructeur Fsecondaire, Metier leMetier unMetier;) mais j'ai un message d'erreur :

Erreur 1 Accessibilité incohérente : le type de paramètre 'FichSequentiel2.Metier.Metier' est moins accessible que la méthode 'FichSequentiel2.Fajout.Fajout(FichSequentiel2.Metier.Metier)'
Messages postés
61
Date d'inscription
dimanche 5 novembre 2000
Statut
Membre
Dernière intervention
24 février 2010

Tu l 'as déclaré comment le "class Metier"?
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

Comme ceci :

class Metier
    {

       private type arg1;
       private type arg2;
    

        public int methode1()
        {
           ...
        }

        public int methode2()
        {
           ...
        }

...
...
}
Messages postés
61
Date d'inscription
dimanche 5 novembre 2000
Statut
Membre
Dernière intervention
24 février 2010

Bon bah il a répondu :)
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

En effet, j'arrive à y accéder en mettant la classe en public, merci beaucoup

Néanmoins j'ai encore un problème.
Depuis la form Fprincipale, on peut accéder à un fichier txt et afficher son contenu dans un MessageBox.
La form Fajout sert elle à ajouter une ligne dans ce fichier.
Dans la première version de mon programme (sans classe métier), l'ajout se faisait correctement.
Dans la version avec classe métier, tout le contenu de mon fichier est écrasé et remplacé par la ligne ajoutée.

Savez-vous d'où celà peut venir ?

Un extrait de code :

Pour afficher les données :
 StreamReader sr = new StreamReader(nomFichier);
 while ((temp = sr.ReadLine()) != null)
  {
    ligne += temp;
  }
sr.Close();
MessageBox.Show(ligne);


Pour écrire :
 StreamWriter sw = new StreamWriter(nomFichier);
sw.WriteLine("la ligne supplémentaire");
sw.Close();
Messages postés
10
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
1 juin 2010

Ok j'ai trouvé, il fallait faire avant :

FileStream leFichier= new FileStream(nomFichier, FileMode.Append);
StreamWriter sw = new StreamWriter(leFichier);

Merci pour votre aide en tout cas :)
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
38
Heureux d'avoir pu t'aider

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé ! -