2009-05-28 8 views
3

Je suis assez nouveau pour les formulaires Windows. Je voudrais savoir s'il est possible de déclencher une méthode sous forme 1 sur un clic de bouton dans le formulaire 2? Mon formulaire 1 a une liste déroulante. Mon formulaire 2 a un bouton Enregistrer. Ce que je voudrais réaliser est: Lorsque l'utilisateur clique sur Enregistrer dans le formulaire 2, j'ai besoin de vérifier si le formulaire 1 est ouvert. Si elle est ouverte, je veux obtenir l'instance et appeler la méthode qui repeuplerait le combo sur le formulaire 1.Mise à feu d'une méthode dans le formulaire 1 sur un clic sur un bouton sur formulaire2

J'apprécierais vraiment si je reçois quelques conseils sur la façon dont je peux faire ce travail. S'il y a un autre moyen que celui-ci, s'il vous plaît faites le moi savoir.

Merci :)

Ajouté: Les deux formules 1 et 2 sont indépendants les uns des autres, et peuvent être ouverts par l'utilisateur dans un ordre quelconque.

Répondre

2

Vous pouvez obtenir une liste de toutes les formes actuellement ouvertes dans votre application à travers la propriété Application.OpenForms. Vous pouvez parcourir cette liste pour trouver Form1. Notez cependant que (en théorie) il peut y avoir plus d'une instance de Form1 (si votre application peut et a créé plus d'une instance).

Exemple:

foreach (Form form in Application.OpenForms) 
{ 
    if (form.GetType() == typeof(Form1)) 
    { 
     ((Form1)form).Close(); 
    } 
} 

Ce code appellera YourMethod sur toutes les instances ouvertes de Form1.

(sous la direction de l'échantillon de code à 2.0 compatible)

0

Bien sûr, cela est possible, tout ce dont vous avez besoin est une référence à Form1 et une méthode publique sur cette classe.

Ma suggestion est de passer la référence Form1 dans le constructeur de Form2.

+0

Gerrie, je ne demande pas la forme 2 de la forme 1, donc je ne pense pas que je peux passer référence. Les formulaires 1 et 2 peuvent être ouverts par l'utilisateur dans n'importe quel ordre. Est-ce encore possible? –

0

Ce que vous pouvez faire est de créer un événement statique dans une autre classe, puis d'obtenir le formulaire 1 pour vous abonner à l'événement. Ensuite, lorsque le bouton a cliqué sur le formulaire 2, augmentez l'événement pour que le formulaire 1 soit activé.

Vous pouvez déclarer l'événement dans le formulaire 1 si vous le souhaitez.

public class Form1 : Form 
{ 
    public static event EventHandler MyEvent; 

    public Form1() 
    { 
     Form1.MyEvent += new EventHandler(MyEventMethod); 
    } 

    private void MyEventMethod(object sender, EventArgs e) 
    { 
     //do something here 
    } 

    public static void OnMyEvent(Form frm) 
    { 
     if (MyEvent != null) 
      MyEvent(frm, new EventArgs()); 

    } 
} 

public class Form2 : Form 
{ 
    private void SaveButton(object sender, EventArgs e) 
    { 
     Form1.OnMyEvent(this); 
    } 
} 
+0

Hey, j'ai essayé votre approche, mais je suis incapable de le faire ----- si (Form1.MyEvent! = Null) Form1.Myevent (this, new EventArgs()); ------ Je reçois une erreur de compilation –

+0

Sorry Rashmi. Je l'ai corrigé maintenant, vous devez lever l'événement de avec Form1 de sorte que vous avez besoin d'un OnMyEvent statique dans Form1, puis Form2 appelle l'OnMyEvent. Essayez-le maintenant. – Malcolm

Questions connexes