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
51
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
51
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