单击form2上的按钮,在表单1中触发方法

时间:2009-05-28 09:36:24

标签: c# winforms .net-2.0

我对Windows表单很新。我想知道是否可以通过单击表单2中的按钮来激活表单1中的方法? 我的表单1有一个组合框。我的表单2有一个“保存”按钮。我想要实现的是: 当用户单击表单2中的“保存”时,我需要检查表单1是否已打开。如果它是打开的,我想获取实例并调用将在表单1上重新填充组合的方法。

如果我能得到一些关于如何解决这个问题的建议,我将非常感激。如果还有其他更好的方式,请告诉我。

谢谢:)

加了: 表单1和表单2彼此独立,并且可以由用户以任何顺序打开。

3 个答案:

答案 0 :(得分:2)

您可以通过Application.OpenForms属性获取应用中所有当前打开的表单的列表。您可以遍历该列表以查找Form1。请注意(理论上)可以有多个Form1实例(如果您的应用程序可以创建多个实例)。

样品:

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

此代码将在Form1的所有打开实例上调用YourMethod

(编辑代码示例为2.0兼容)

答案 1 :(得分:0)

当然这是可能的,你需要的只是对Form1的引用和该类的公共方法。

我的建议是在Form2的构造函数中传递Form1引用。

答案 2 :(得分:0)

您可以做的是在另一个类中创建静态事件,然后获取表单1以订阅该事件。然后,当在表单2中单击按钮时,然后提升表单1的事件以便接收。

如果您愿意,可以在表单1中声明事件。

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); 
    }
}