Passage de variables Form / Class [Résolu]

cs_ansizak 191 Messages postés mercredi 11 juillet 2007Date d'inscription 30 juin 2011 Dernière intervention - 28 juin 2008 à 17:20 - Dernière réponse : MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention
- 29 juin 2008 à 14:36
Bonjour,

Je travaille sur une application dans laquelle ej dispose d'un module de configuration.
j'ai deux Form:
- la principale
- la fenetre de configuration

je dispose d'une class dans laquelle je souhaite stocker mes variables pour les utiliser dans les 2 Forms

Au lancement, la form 2 se charge automatiquement obligeant l'utilisateur à entrer ses paramètre de configuration qui sont alors stockés dans les variable de la class.
Lorsque je reviens dans la Form 1 mes variable contenues dans la class sont toutes nulles.. pourquoi ?

Je pense que mon problème provient de la manière dont je déclare la class dans les form mais j'avou ne plus rien y comprendre. Voici un extrait du code de:

- Ma Form1:

public partial class Form1 : Form
    {

        Class1 s = new Class1();
        Form2 settings = new Form2();

        public Form1()
        {
            InitializeComponent();
            settings.ShowDialog();
            load_favourite();
         }

etc..
    }

Ma Form2 :

public partial class Form2 : Form
    {
       
        Settings_var s = new Settings_var();

        public Form2()
        {
            InitializeComponent();
            test_settings();
            load_settings();
            test_favourite();
            create_temp();
        }
    }

Merci par avance de m'éclairer..

Cordialement,
Anz.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 29 juin 2008 à 14:04
3
Merci
Salut,

C'est parce que tu n'as pas déclaré ta classe Class1 comme public ou internal (auquel cas, tu déclareras aussi tes variables en internal). Si tu en spécifies pas le modificateur d'acces, tes classes / membres seront private par défaut.
Pour en savoir plus sur les modificateurs d'acces : http://msdn.microsoft.com/fr-fr/library/wxh6fsc7(VS.80).aspx

Pour répondre a ton PS, pour faire ca tu peux utiliser des variables static.(voire une classe static si tu veux une classe spécialement là pour partager des parametres, constantes, ...).  Plutot qu'un exemple, autant te rediriger directement vers la MSDN : http://msdn.microsoft.com/fr-fr/library/79b3xss3(VS.80).aspx 

Mx
MVP C# 

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de MorpionMx
cs_ansizak 191 Messages postés mercredi 11 juillet 2007Date d'inscription 30 juin 2011 Dernière intervention - 28 juin 2008 à 17:24
0
Merci
Veuillez ne pas tenir compte du code de la form2, une erreur s'y est glissée, le voici:

public partial class Form2 : Form
    {
       
        Class1 s = new Class1();

        public Form2()
        {
            InitializeComponent();
            test_settings();
            load_settings();
            test_favourite();
            create_temp();
        }
    }
Commenter la réponse de cs_ansizak
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 28 juin 2008 à 21:09
0
Merci
Salut,

Ton probleme, vient du fais que tu aies 2 instances différentes de Class1

Au choix, soit tu fais de Class1 une classe statique, qui te permettra de partager certaines données entre chacune de tes classes, (si c'est ton but) ou alors tu  utilises des propriétés publiques dans ta Form2, que ta Form1 ira récuperer.

Mx
MVP C# 
Commenter la réponse de MorpionMx
didi2005 46 Messages postés dimanche 27 novembre 2005Date d'inscription 1 juillet 2008 Dernière intervention - 28 juin 2008 à 23:41
0
Merci
Bonjour,

Oui, MorpionMx a raison ton problème ce que tu ne travaille pas avec la même instance tu peux changer ça pas les deux méthodes de Form : Show() et  Hide().

i have a dream
Commenter la réponse de didi2005
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 29 juin 2008 à 10:32
0
Merci
Salut,

Transformation de ton code sans passer par une classe/variable statique

Form1 :

private
Class1 s;

public Form1()
{
   InitializeComponent();

   using (
Form2 settings =
new
Form2())
   {

      if (settings.ShowDialog() ==
DialogResult.OK)
      {

         this.s = settings.Settings;
       }
     }
      LoadFavourite();
}
Form2 :

private
Class1 s =
new
Class1();

public
Class1 Settings
{

   get {
return
this.s; }
 }

public Form2()
{
      InitializeComponent();
      TestSettings();
      LoadSettings();
      TestFavourite();
      CreateTemp();
}
A la fermeture de Form2, si l'utilisateur valide, il te faut affecter sa propriété DialogResult à DialogResult.OK

Autrement, n'hésite pas a respecter les conventions de nommage des tes variables/classes et de bien nommer tes variables, afin d'améliorer la lisibilité du code

Mx
MVP C# 
Commenter la réponse de MorpionMx
cs_ansizak 191 Messages postés mercredi 11 juillet 2007Date d'inscription 30 juin 2011 Dernière intervention - 29 juin 2008 à 13:26
0
Merci
Oooh merci !

Vous me rendez un énorme service puisqu'il s'agit d'un problème qui m'ennuie depuis longtemps.
Merci encore !! :-)

Cordialement,
Anz.
Commenter la réponse de cs_ansizak
cs_ansizak 191 Messages postés mercredi 11 juillet 2007Date d'inscription 30 juin 2011 Dernière intervention - 29 juin 2008 à 13:55
0
Merci
Me revoilà, :s

J'ai utilisé la transformation que tu m'a indiqué Morpion, mais j'obtiens le message d'erreur de compilation: "accessibilité incohérente: le type de propriété  Mon_Prog.Class1 est moins accessible que Mon_Prog.Form2.Settings

De plus, ma Form2 ne dispose pas de propriété DialogResult...

J'ai du mal comprendre, pourrais-tu me donner des précisions supplémentaire ?

Merci encore !

P.S: n'existe -t-il pas une méthode simple qui permet de créer une classe de variables communes et utilisables par toutes les autres Form ?

Cordialement,
Anz.
Commenter la réponse de cs_ansizak
cs_ansizak 191 Messages postés mercredi 11 juillet 2007Date d'inscription 30 juin 2011 Dernière intervention - 29 juin 2008 à 14:26
0
Merci
Parfait ! Une class static correspond complétement à mes besoins.

Re - Merci de m'avoir fait comprendre autant de notions aussi vite :)

Cordialement,
Anz.
Commenter la réponse de cs_ansizak
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 29 juin 2008 à 14:36
0
Merci
Pas de quoi

Mx
MVP C# 
Commenter la réponse de MorpionMx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.