oliv666
Messages postés9Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 1 décembre 2006
-
29 nov. 2006 à 15:28
rclsilver02
Messages postés130Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention10 février 2012
-
29 nov. 2006 à 16:31
Bonjour,
Mon problème est le suivant :
J'ai 2 formulaires dans le même espace de nom. Je souhaiterais accéder aux méthodes d'un formulaire à l'autre.
ex :
Form 1
namespace first
{
public partial class Form1 : Form
{
//Mes méthodes public appelés
public void MethodeAppelée
{
//Mon code;
}
}
}
Form2
namespace first
{
public partial class Form2 : Form
{
//Mes méthodes public appelantes
ex:
public void appel()
{
first.Form1.MethodeAppelée();
}
}
}
Visiblement cette façon de faire ne fonctionne pas !
Quel est la bonne ???
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 29 nov. 2006 à 15:43
Salut,
Comme dis Bernie666, il te faut appeler cette méthode par le biais d'une instance de Form1.
Sinon, c'est MethodeAppelée qui doit etre static, et pas la classe Form1 ;)
bernie666
Messages postés427Date d'inscriptionmercredi 1 octobre 2003StatutMembreDernière intervention29 janvier 20081 29 nov. 2006 à 15:37
il faut que tu fasse une référence sur ton premier formulaire dans ta form2 ... creer une instance de ta form1 ... ou alors tu gardes comme tu a fais mais tu transforme ta classe form1 en classe statique
oliv666
Messages postés9Date d'inscriptionsamedi 5 février 2005StatutMembreDernière intervention 1 décembre 2006 29 nov. 2006 à 15:48
J'ai essayé tes deux solutions mais je n'y parviens toujours pas.
Je t'explique plus en détail :
Ma form1 est un formulaire qui est en fait la fenetre principale de mon appli.
Lorsque je clique sur un bouton (sur la form1) j'instancie la form2 en form2A.
Et j'essaye d'appeler depuis la form2A, une méthode du formulaire principal (qui est déjà instanciée donc...)
rclsilver02
Messages postés130Date d'inscriptionmercredi 19 mars 2003StatutMembreDernière intervention10 février 2012 29 nov. 2006 à 16:31
Tu as dans Application.OpenForms une collection des fenetres instanciées. il te suffit, dans l'hypothese qu'une seule forme par type est instanciée, de parcourrir ta collection et de trouver la feuille qui corresponds a la classe form recherchée... je m'expliqe avec un exemple :
public partial class Form1 : Form
{
// le reste du code...
public Form2 GetForm2()
{
FormCollection forms =
Application.OpenForms;
int i;
for (i = 0; i < forms.Count; ++i)
{
if (forms[i]
is
Form2)
{
return forms[i];
}
}
return null;
}
}
Ceci est une premiere méthode pas tres propre et tout...
Voici la seconde...
tu passe un pointeur de la form en constructeur
tu aurais par exemple
public class Form1 : Form
{
//...
private Form2 f2;
public Form1(Form2 f2) {this.f2 = f2; }
}
et
public class Form2 : Form
{
//...
private Form1 f1;
public Form1(Form1 f1) {this.f1 = f1; }
}
tu peux y ajouter des proprietés get/set pour définir les références
et ensuite tu construis : Form1 f new Form1(null); Form2 f2 new Form2(f1);
et avec l'accesseur par exemple : f.Form2 = f2;