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

Signaler
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
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

Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

Bonjour,

il faut que tu cast ton parent :


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

hum.......
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
87
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#
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

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.......
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
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
Messages postés
131
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
7 juillet 2005

Tu peux essayer de mettre la propriété visible de ton datagrid à false ou sinon met ton datagrid dans un MdiChild

hum.......
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
ç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