Accés méthodes dans un formulaire

[Résolu]
Signaler
Messages postés
9
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
1 décembre 2006
-
Messages postés
131
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012
-
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 ???

Merci d'avance pour votre réponse.

Oliv

10 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
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 ;)

Mx
MVP C# 
Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
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

++
Messages postés
9
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
1 décembre 2006

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...)

J'espère que c'est suffisamment clair...
Messages postés
9
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
1 décembre 2006

OK ça fonctionne finalement.
en transformant la méthode public void MethodeAppelée() en public static void MethodeAppelée()

Merci à vous deux !
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
C'est malheureusement le type de question qui revient trop souvent.
Tu trouveras tout ce qu'il te faut ici

http://www.csharpfr.com/infomsg_RECUPERER-CONTENU-TEXTBOX-SUR-AUTRE-FORME_846983.aspx#10

Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Ah, j'avais pas vu ta réponse le temps de chercher l'autre topic.
Si le fait que la méthode soit statique te convienne, alors ca route

Mx
MVP C# 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Ca sent le passage de paramètres par ici
Mx> C'est déjà Noël ?

<hr size="2" />-Blog-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
41
Mx il fête Noel le 24 Novembre pour avoir ses cadeaux plus vite.
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
J'ai pas de date fixe, je met mon bonnet quand il fait froid

Mx
MVP C# 
Messages postés
131
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012

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;

voila.. j'espere que j'ai été clair...