[C#] Acceder à la méthode d'une autre form

cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 22 mars 2005 à 14:32
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 23 mars 2005 à 13:55
Bonjour,


Je débute...


J'ai deux forms, ma principale (Pri) qui est la MDI mère et une autre (Sec) qui est une MDI fille.


Dans Pri, j'ai une méthode publique: "public void chargerDonnees()" qui recharge le dataGrid de Pri.


Dans Sec, losque je fait des transactions, j'aimerais recharger le datagrid de Pri grace à la méthode: chargerDonnees(),
mais elle n'est pas accessible, pourtant il voit Pri...
Faut-il que je l'instancie dans Sec ?


Merci d'avance.

David, à VERSAILLES

7 réponses

Athalus Messages postés 131 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 7 juillet 2005
22 mars 2005 à 16:23
Bonjour,

il faut que tu cast ton parent :


Pri FormParent = (Pri)
this.MdiParent;
FormParent .chargerDonnees()

hum.......
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
23 mars 2005 à 09:16
Salut Athalus,

Je dois avouer que l'idée est bonne mais j'ai essayé, et là, il me fait une erreur lors de l'éxecution.
le très parlant: "La référence d'objet n'est pas définie à une instance d'un objet."
Il ne rentre même pas dans la fonction:
// Code dans frmSec pour recharger les données de frmPri
frmMain myPri;
myFrm = ((frmPri) this.MdiParent); // c bon, il caste
myFrm.chargerDonnees(); // là, il pête

Dans l'espion express, il me met que la variable myFrm est hors de portée, ainsi que frmMain et this.MdiParent est null, c'est étrange car je l'ai bien affecté.

j'ai appelé frmSec depuis frmPri comme ça:

// Code dans frmPri pour lancer frmSec
,
----

myFrmSec = new frmSec();
myFrmSec.MdiParent = this;
myFrmSec.Parent = dgMain;
myFrmSec.Show();

Mais je me disait que le this est peut-être le bouton (car le code se trouve à l'interieur d'un onClick), j'ai donc voulu mettre le nom de la classe frmSec mais il n'en veut pas.
Je fait comme ça:


// Code dans frmSec pour recharger les données de frmPri
,
----

((frmPri) frmSec.MdiParent).chargerDonnees(); // ça pête
Mais il ne compile pas: "Une référence d'objet est requise pour la propriété, la méthode ou le champ non statique 'membre'" sur frmSec.MdiParent

David, à VERSAILLES
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
23 mars 2005 à 09:25
Non le this est bien l'instance de frmSec dans laquelle ton code s'execute.

Par contre je ne suis pas sûr mais il me semble que MdiParent et Parent (hérité de Control) ne font pas bon ménage.

Essaie :
myFrmSec = new frmSec();
myFrmSec.MdiParent = this;
myFrmSec.Show();
...
((frmPri) this.MdiParent).chargerDonnees();

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
Athalus Messages postés 131 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 7 juillet 2005
23 mars 2005 à 09:32
frmMain myPri;
myFrm = ((frmPri) this.MdiParent); // c bon, il caste
myFrm.chargerDonnees(); // là, il pête

Ca m'a l'air bien bisard tout ca !!

en fait c'est comme ca

Nom_de_ta_classe Nom_de_ma_variable = (Nom_de_ta_classe)this.MdiParent;
Nom_de_ma_variable.chargerDonnees();

myFrmSec = new frmSec();
myFrmSec.MdiParent = this;
myFrmSec.Parent = dgMain; // moi je ne met pas cette ligne mais ca ne change peut etre rien
myFrmSec.Show();

hum.......
0

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

Posez votre question
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
23 mars 2005 à 09:36
Salut coq,

Tu as raison, parent et MdiParent ne font pas bon ménage car si j'affecte le parent avant le MdiParent, ça pête lors de l'execution.
Mais je suis obligé de faire ça car ma form principale (MdiParent) contient un datagrid qui prends toute la page,
et si je ne met pas ce datagrid en Parent, la fille MDI s'affiche en dessous du dataGrid, on ne la voit donc pas.

David, à VERSAILLES
0
Athalus Messages postés 131 Date d'inscription jeudi 17 juin 2004 Statut Membre Dernière intervention 7 juillet 2005
23 mars 2005 à 13:27
Tu peux essayer de mettre la propriété visible de ton datagrid à false ou sinon met ton datagrid dans un MdiChild

hum.......
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
23 mars 2005 à 13:55
ça ne convient pas à mes attentes, j'aimerais que le dataGrid soit toujours en fond.

De plus, j'ai essayé de mettre le dataGrid.visible à false et ensuite à true mais rien n'y fait, il se remet devant.

David, à VERSAILLES
0
Rejoignez-nous