Global variables

[Résolu]
Signaler
Messages postés
9
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
7 mai 2007
-
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
bonjour,

ma question en suprendra peut etre plus d'un car elle paraitra peut etre idiote.
Mon probleme consiste en une application windows, ma solution contient 2 forms (f1,f2).

f1 fait office de login form qui une fois connecte genere f2 et se cache.
Lorsque je me connecte je desire garder la valeur du "username" et lafficher dans un label sur un label situé sur f2.

f1 : login et mdp, si valide creation de f2 et parser le login sur un label situé ds f2.
f2 dans initialize components initialise son label avec la valeur theoriquement contenu ds fichier de variables globales ou l'on trouve une string declare et initialisé par f1 lors de la connexion reussie.

C ptre un pe confut mais je narrive pas a trouver les mots exacts.

Pour ce faire j'ai voulu creer un module ou plutot une classe dans laquelle je declare mes variables auquelles je peux acceder depuis nimporte kel form le tps que lapplication est en "Run".

Mais ca ne marche pas, lorsque dans f1 ou f2 jimporte le namespace ca ne fonctionne pas?! je ne peux pas acceder a ma variable global?!

Une alternative pour pouvoir faire communiquer les forms les unes avec les autres serait l'usage de delegates mais je ne les matrise que faiblement et un simple fichier on l'on stockerai dans un simple module.

Voila.

Si quelqun aurait un exemple ou quelques explications japprecierai merci.

9 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
essaye :
Global.ShowForm( Application.OpenForms["form1"], true);

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Merci de reformuler ta question dans un français correct... c'est illisible !

Réglement CodeS-SourceS

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
9
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
7 mai 2007

J'ai 2 forms dans ma solution c#.

Le but serait de pouvoir faire interargir les 2 forms.

Ceci est possible via des "delegates" ou "evenements delegués" je crois en francais.

Ne matrisant que tres mal cette technique je pensais utiliser des variables globales (public) qui seraient stockées un fichier au sein de la solution. Celles ci seraient alors accessiblent depuis n'importe quel form en theorie.

Comment creer ce fichier et quoi mettre dedans?!
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
il est possible de faire ceci en créant une classe statique contenant des membres statiques

ex :
public static class Global {
   public static string Nom;
   public static int Age;
}

et tu l'utilises ainsi :
Global.Nom = "toto";
Global.Age = 10;

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
9
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
7 mai 2007

Merci ca marche.

Toujours a propos de cette classe Global.

Y aurait il un moyen de faire ceci (le code est erroné):

class static global{

   public static string test;

   //Comment faire a ce stade svp?, le premier parametre nest pas reconnu comme une variable valide?
   public
static
void showForm(System.Windows.Forms form,
bool test)
   {  

         if (test) {
            form.show(); 
         }
   }

}

Cette procedure que je pourrai appeler depuis n'importe quelle form pour en manipuler une autre:

namespace
WindowsApplication1
{

      public
partial
class
Form2 :
Form{



      public
Form2()
      {
         InitializeComponent();
         //ceci fonctionne
         this.label.text=global.test;
      }




      private



void
button1_Click(

object
sender,

EventArgs
e){
         //Cette form1 existe deja mais son état est form1.hide(); donc je veux la faire reapparaitre depuis la form2
         showForm(

Form1
,

true
);
      }
   }
}
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
je pense que tu mélanges un peu...

dans la classe Global :

class static global{

   public static string test
;

   //Comment faire a ce stade svp?, le premier parametre nest pas reconnu comme une variable valide?
   public static void showForm(System.Windows.Forms.Form form, bool test)
   {  
         if (test) {
            form.show(); 
         }
   }

}

System.Windows.Forms est un namespace, le type c'est System.Windows.Forms.Form

Dans Form2 :
namespace WindowsApplication1
{
      publicpartialclassForm2 : Form{
      publicForm2()
      {
         InitializeComponent();
         //ceci fonctionne
         this.label.text=global.test;
      }

      private
voidbutton1_Click(
objectsender,
EventArgse){
         //Cette form1 existe deja mais son état est form1.hide(); donc je veux la faire reapparaitre depuis la form2
         showForm(
form1,
true);
      }
   }
}

attention à bien mettre form1 en minuscule... Form1 est me type.

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
9
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
7 mai 2007

//Aucune erreur dans ce fichier

namespace



globalVariables{


public



static



class



global

{







public



static



string
test;


public



static



void
showForm(System.Windows.Forms.

Form
form123,

bool
test){


if
(test) {

form123.Show();

}}}}

Form2:

namespace


WindowsApplication1{


public



partial



class



Form2
:

Form
{


public
Form2(){InitializeComponent();

}


private



void
button1_Click(

object
sender,

EventArgs
e){



//Ne compile pas car Error 1 'WindowsApplication1.Form1' is a 'type' but is used like a 'variable', meme erreur avec 1er parametre ecrit en minuscule?!

global
.showForm(

Form1
,

true
);
}}}
Messages postés
9
Date d'inscription
lundi 17 janvier 2005
Statut
Membre
Dernière intervention
7 mai 2007

Fantastique, brillant.

J'aurai bien aimé connaitre la demarche pour resoudre le probleme car je ne sais pas quoi ou comment chercher a l'interieur. J'eviterai ansi d'emcombrer le forum avec des question bateau?!
Et ptre un jour je pourrais aider quelqu'un a mon qui sait?! Enfin j'ai le tps

Cela dit merci pour l'astuce, meme si n'est peut etre pas academique comme procédé, ca marche
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
Tu as tout le temps de te former et ensuite d'aider les autres... le développement c'est mon métier... je l'exerce depuis 1999... ca aide ;)

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]