Utilisation de la classe courante partout

Résolu
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 - 7 déc. 2005 à 17:02
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 10 déc. 2005 à 13:51
Bonjour,
Je débute en c# et j'ai un souci concernant l'utilisation des classes.
Je déclare une classe que j'instancie sur une form qui en appele d'autre.
Je voudrais que les autres forms appelés puissent utiliser la classe déclarée dans la première fenêtre(càd la classe en cours sans en instancier une autre dans cette nouvelle fenêtre.)
J'essaye de leur passer en paramètre la classe mais j'ai une erreir de type system.stack.overflow

Merçi.

18 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 09:21
De tout façon de part ton titre je pense que ce que tu veux faire c'est un singleton.

Creer ta classe et rajoute çà dedans :

private static MaClass _instance;

internal MaClass Instance
{
get
{
if (_instance== null)
_instance = new MaClass();

return _instance;
}
}

Ensuite tu accèdes à ta classe de partout en faisant MaClass.Instance.MaFunction.

::|The S@ib|::
MVP C#.NET
3
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 11:56
private system.Int32 _typeconnex=0;

Définition de la propriété :

public system.Int32 TypeConnex
{
get
{
return _typeconnex;
}
set
{
_typeconnex = value;
}
}

Et tu y accedes :
Maclasse.Instance.TypeConnex = 0;
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 déc. 2005 à 17:25
Salut,

Comment fait tu ce passage en paramètre ?

/*
coq
MVP Visual C#
*/
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
7 déc. 2005 à 17:34
salut,

exemple de code

1. Dans Ma feuille maître

public class maclasse;

et lors de l'appel de ma feuille

je fais

f mafeuille;
f=new mafeuille(maclasse);
f.showdialog();

2. dans ma fuielle 2

private class cls

public mafeuille_load(class cls1)
cls1=cls;
0

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

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 déc. 2005 à 17:45
Hum...rien compris.
Tu peux le refaire en vrai code l'exemple stp ?

/*
coq
MVP Visual C#
*/
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
7 déc. 2005 à 18:00
Sachant que la classe a déjà été écrite avec ses propriétés et ses méthodes et s'appelle classedebase dans le même namespace.
/////////////////////////////////////////////////
fenêtre Maître
Réferencement de la classe
public classedebase clsbase;

Reste du code de la fenêtre ........................

/////////////////////////////////////////
Code de l'événement de l'appel de la fenêtre


frmprmdta mdta;


mdta=
new frmprmdta(clsbase);


mdta.ShowDialog();



//////////////////////////////////////////////
Code pour la fenêtre qui doit être appelée
private classedebase cls
public frmprmdta(Classdebase cls1)
// en paramètre la classe de base


{



//



// Requis pour la prise en charge du Concepteur Windows Forms



//


InitializeComponent();



//



// TODO : ajoutez le code du constructeur après l'appel à InitializeComponent



//


cls1=cls;
}
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 déc. 2005 à 18:03
Déjà :
cls1=cls; => this.cls = cls1;

/*
coq
MVP Visual C#
*/
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
7 déc. 2005 à 18:10
Salut,

D'accord, c'est ce que je fais déjà, mais ça plante
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
7 déc. 2005 à 19:57
Oui mais je ne vois aucune raison d'avoir une StackOverflowException dans ce code là.
Le problème est sans doute ailleurs.
Tu fais une opération récursive quelquepart ? Une boucle infinie ?
Avoir le restant des informations de l'exception nous aidera probablement à y voir plus clair, et elle te donne surtout l'endroit exact du code où il y a eu le problème.

/*
coq
MVP Visual C#
*/
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
8 déc. 2005 à 08:05
Hello,

Est-ce que par hasard, tu n'aurait pas une propriété dans ce style :


public
Classdebase cls
{
g
et{
return cls;}

set{cls=
value;}
}

au lieu de

private Classdebase _cls;
public
Classdebase cls
{
get{return _cls;}
set{_cls=value;}
}

Amicalement, SharpMao
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 09:16
public frmprmdta(Classdebase cls1)
// en paramètre la classe de base
{


InitializeComponent();





cls1=cls;
}

C'est pas l'inverse que tu voudrais faire ?

cls = cls1 ?

::|The S@ib|::
MVP C#.NET
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 déc. 2005 à 09:22
Pfff
Arrête de regarder sur la copie du voisin
;-)

/*
coq
MVP Visual C#
*/
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
8 déc. 2005 à 11:52
Salut,
Merci pour l'avancement du débat mais le souci persiste même en créant le singleton.
En effet, le message apparait topujours quand j'essaye de modifier la valeur d'une propriété par la biais de l'objet de la deuxième ênêtre.

Le code est Maclasse.Instance.fields= (int) 0;

Le fields dans maclasse est :

private system.Int32 typeconnex=0;

Définition de la propriété :

public system.Int32 _itypeconnex
{
get
{
return typeconnex;
}
set
{
_typeconnex=value;
}
}
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
8 déc. 2005 à 12:21
Eh ouais,

A peu de choses près ce que j'avais dit.

Amicalement, SharpMao
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
8 déc. 2005 à 12:35
Salut,

Décidement, la programmation objet me fera toujours bondir.
Ceci fonctionne, merci à tous pour votre participation.

A+
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
8 déc. 2005 à 14:37
accepte les réponses.
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
9 déc. 2005 à 18:09
Salut,

excuse-moi, c'est que j'étais pressé d'avancer dans le prog.

Une chose.

L'utilisation de la classe depuis d'autres fenêtres que là où elle a été declarée peut se faire aussi de cette manière :

1 Sur la fenêtre où on déclare la classe il faut que la variable soit en static.

Par la suite on peut fvaire : mafeuille.mavariable.methode ou propriété.

Sinon l'idée du singleton aussi fonctionne très bien.

A+
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
10 déc. 2005 à 13:51
CElà revient au même mise a part que le singleton est plus propre.

::|The S@ib|::
MVP C#.NET
0
Rejoignez-nous