在Form2上点击按钮时,如何在Form1中调用一个方法?

3
我对Windows窗体不是很熟悉。想请问一下,是否可以在表格2中的按钮点击时触发表格1中的方法? 我的表格1有一个组合框,表格2有一个保存按钮。我想要实现的是: 当用户在表格2中单击保存时,我需要检查表格1是否已打开。如果已经打开,我希望获取该实例并调用在表格1上重新填充组合框的方法。 如果您有任何指导,请告诉我,我将不胜感激。 另外,表格1和表格2彼此独立,用户可以按任意顺序打开它们。
3个回答

2
您可以通过Application.OpenForms属性获取应用程序中所有当前打开的窗体列表。您可以循环遍历该列表以查找Form1。但请注意,理论上可能会存在多个Form1实例(如果您的应用程序可以并且已经创建了多个实例)。
示例:
foreach (Form form in Application.OpenForms)
{
    if (form.GetType() == typeof(Form1))
    {
        ((Form1)form).Close();
    }
}

这段代码会在所有打开的 Form1 实例上调用 YourMethod
(修改了代码示例以使其与 2.0 兼容)

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

嗨,我尝试了你的方法,但是我无法做到这一点 ----- if(Form1.MyEvent != null)               Form1.Myevent(this, new EventArgs());

我得到了编译时错误。
- Rashmi Pandit
抱歉,Rashmi。我已经修复了,现在你需要在Form1中引发事件,因此你需要在Form1中创建一个静态的OnMyEvent方法,然后Form2调用OnMyEvent。现在试试吧。 - Malcolm

0
当然可以,你所需要的是对Form1的引用以及该类上的一个公共方法。
我的建议是在Form2的构造函数中传递Form1的引用。

Gerrie,我没有从表单1调用表单2,所以我不认为我可以传递引用。用户可以按任意顺序打开表单1和2。这还可能吗? - Rashmi Pandit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接