Une instance de classe métier pour plusieurs forms

Résolu
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010 - 25 nov. 2009 à 16:45
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 - 25 nov. 2009 à 19:56
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

krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
25 nov. 2009 à 17:34
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é ! -
3
rours Messages postés 61 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 24 février 2010
25 nov. 2009 à 17:01
Salut, tu pourrais donner un petit exemple ? histoire de bien cadrer !
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 17:16
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();
        }
      }
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 17:18
Et donc je voudrais que Fsecondaire accède à l'instance de Metier de Fprincipale (je pensais pouvoir éditer mon message ^^)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rours Messages postés 61 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 24 février 2010
25 nov. 2009 à 17:20
En gros tu veux faire passer ton objet de la form1 à la form2 ?
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 17:24
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)'
0
rours Messages postés 61 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 24 février 2010
25 nov. 2009 à 17:30
Tu l 'as déclaré comment le "class Metier"?
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 17:32
Comme ceci :

class Metier
    {

       private type arg1;
       private type arg2;
    

        public int methode1()
        {
           ...
        }

        public int methode2()
        {
           ...
        }

...
...
}
0
rours Messages postés 61 Date d'inscription dimanche 5 novembre 2000 Statut Membre Dernière intervention 24 février 2010
25 nov. 2009 à 17:46
Bon bah il a répondu :)
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 18:04
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();
0
darkgloom Messages postés 10 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 1 juin 2010
25 nov. 2009 à 18:55
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 :)
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
25 nov. 2009 à 19:56
Heureux d'avoir pu t'aider

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