Comment garder un objet tous le long du programme

caranille - 11 févr. 2013 à 11:27
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016 - 12 févr. 2013 à 21:31
Bonjour,

Voilà je suis en train de développer une petite application en C# sous forme de MDI Parent, il y a donc à l’intérieur un formulaire d'inscription/Connexion qui marche, j'ai créer une classe Compte.cs avec des propriété pour y mettre toutes les informations du comptes en mémoire le soucis est que lorsque je vais dans une autre windows form je ne peux plus accéder à mon objet:

voici le code lors de la connection:

if (donnees.HasRows)
{
while (donnees.Read())
{
int Id_Compte = donnees.GetInt32(0);
string Pseudo_Compte = donnees.GetString(1);
string Mdp_Compte = donnees.GetString(2);
string Mail_Compte = donnees.GetString(3);
int PV_Restant_Compte = donnees.GetInt32(4);
int PV_Maximum_Compte = donnees.GetInt32(5);
int PM_Restant_Compte = donnees.GetInt32(6);
int PM_Maximum_Compte = donnees.GetInt32(7);
int Force_Compte = donnees.GetInt32(8);
int Magie_Compte = donnees.GetInt32(9);
int Defense_Compte = donnees.GetInt32(10);
int PO_Compte = donnees.GetInt32(11);
int PC_Compte = donnees.GetInt32(12);
string Status_Compte = donnees.GetString(13);
Compte compte = new Compte(Id_Compte, Pseudo_Compte, Mdp_Compte, Mail_Compte, PV_Restant_Compte, PV_Maximum_Compte, PM_Restant_Compte, PM_Maximum_Compte, Force_Compte, Magie_Compte, Defense_Compte, PO_Compte, PC_Compte, Status_Compte);
MessageBox.Show("Bienvenue " + compte.Pseudo);
}

Voici le code que je voudrais mettre sur une autre form:

Afficherpseudolabel = compte.pseudo et la il ne connait pas compte.pseudo alors que sur la forme ou j'ai créer l'objet il le reconnait comment faire pour que mon objet reste existant quelque soit la partie du programme ou je suis

Cordialement, Jérémy

5 réponses

Voici la classe Compte.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlServerCe;
using System.Data.SqlTypes;

namespace Caranille
{
    public class Compte
    {
        public int Id;
        public string Pseudo;
        public string Mdp;
        public string Email;
        public int PV_Restant_Compte;
        public int PV_Maximum_Compte;
        public int PM_Restant_Compte;
        public int PM_Maximum_Compte;
        public int Force_Compte;
        public int Magie_Compte;
        public int Defense_Compte;
        public int PO_Compte;
        public int PC_Compte;
        public string Status_Compte;

        public Compte(int id, string pseudo, string mdp, string email, int pv_restant_compte, int pv_maximum_compte, int pm_restant_compte, int pm_maximum_compte, int force_compte, int magie_compte, int defense_compte, int po_compte, int pc_compte, String status_compte)
        {
            Id = id;
            Pseudo = pseudo;
            Mdp = mdp;
            Email = email;
            PV_Restant_Compte = pv_restant_compte;
            PV_Maximum_Compte = pv_maximum_compte;
            PM_Restant_Compte = pm_restant_compte;
            PM_Maximum_Compte = pm_maximum_compte;
            Force_Compte = force_compte;
            Magie_Compte = magie_compte;
            Defense_Compte = defense_compte;
            PO_Compte = po_compte;
            PC_Compte = pc_compte;
            Status_Compte = status_compte;
        }
    }
}
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
11 févr. 2013 à 12:11
Salut,

Tu peux te créer un singleton :
http://msdn.microsoft.com/en-us/library/ff650316.aspx

C'est tout bête. C'est un design pattern qui a pour objectif de ne conserver qu'une seule intance d'une même classe.

Pour cela, tu déclares l'instances de la classe en static et tu créés un accesseur sur cette instance. Pour ne pas pouvoir la ré-instancier en dehors de la classe, tu utilises un constructeur privé.
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
11 févr. 2013 à 20:23
Salut,

La solution de Julien39 est une bonne solution,

mais puisque tu utilises un SqlDataReader, pourquoi ne pas sauvegarder le xml de données, puis le relire à loisir :
Après ton code qui utilise le DataReader

(...)
int Id_Compte = donnees.GetInt32(0);
(...)
DataTable tmpDt =  donnees.GetSchemaTable();
tmpDt.WriteXml("COMPTE.xml", XmlWriteMode.WriteSchema);



// pour relire dans un autre endroit du programme
DataTable tmpDt = new DataTable();
tmpDt.ReadXml("COMPTE.xml");
// exemple de récupération du champ ID_COMPTE
int idCompte = Convert.ToInt32( tmpDt.Rows[0]["ID_COMPTE"] );



bye...
0
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
12 févr. 2013 à 10:15
Bonjour, tu peux aussi passer l'objet d'un formulaire à l'autre.
Voir cette discussion en exemple


Whismeril
0

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

Posez votre question
soussous78 Messages postés 47 Date d'inscription mardi 21 novembre 2006 Statut Membre Dernière intervention 5 novembre 2016
12 févr. 2013 à 21:31
Lorsque j'ai besoin de propriété qui seront utilisées tout le long de mon code, je crée une classe que je nomme 'Statique' et je crée des objects statique à l'interieur
public class Statique
{
   public Compte compte;
}


tu l'appelle ainsi de n'importe où de cette facon :
if (donnees.HasRows) 
{ 
while (donnees.Read()) 
{ 
int Id_Compte = donnees.GetInt32(0); 
string Pseudo_Compte = donnees.GetString(1); 
string Mdp_Compte = donnees.GetString(2); 
string Mail_Compte = donnees.GetString(3); 
int PV_Restant_Compte = donnees.GetInt32(4); 
int PV_Maximum_Compte = donnees.GetInt32(5); 
int PM_Restant_Compte = donnees.GetInt32(6); 
int PM_Maximum_Compte = donnees.GetInt32(7); 
int Force_Compte = donnees.GetInt32(8); 
int Magie_Compte = donnees.GetInt32(9); 
int Defense_Compte = donnees.GetInt32(10); 
int PO_Compte = donnees.GetInt32(11); 
int PC_Compte = donnees.GetInt32(12); 
string Status_Compte = donnees.GetString(13); 
Statique.compte = new Compte(Id_Compte, Pseudo_Compte, Mdp_Compte, Mail_Compte, PV_Restant_Compte, PV_Maximum_Compte, PM_Restant_Compte, PM_Maximum_Compte, Force_Compte, Magie_Compte, Defense_Compte, PO_Compte, PC_Compte, Status_Compte); 
MessageBox.Show("Bienvenue " + Statique.compte.Pseudo); 
} 
}

et lorsque tu en a besoin quelque part
Statique.compte.Status_Compte="..."
0
Rejoignez-nous