如何通过Form2的命令使Form1调用一个方法

本文关键字:方法 一个 调用 Form1 Form2 何通过 命令 | 更新日期: 2023-09-27 18:21:48

我每次都被困在这里,显然我永远找不到按照规则手册运行的方法。:(我在Form1中有一个方法,我想从Form2调用它。或者:命令Form1 by Form2。我从Form2调用了它,但后来我得到了一个NullPointerExp:

表格2:

    private Form1 f1;
    public Form2(Form1 of)
    {
        InitializeComponent();
        this.f1 = of;
    }
    private void buttonOK_Click(object sender, EventArgs e)
    {
        f1.callMethod(3,3,1);
        Form.ActiveForm.Close();
    }

此方法在Form1中放置的面板中创建一个按钮数组(猜测存在问题)。

我试图将callMethod()到Form1的参数传递给类变量。无论如何,我确信这是一种糟糕的风格。尽管如此,还是必须调用该方法。

我想出了一个在Form1中创建某种监听器的主意:禁用Form1,直到在Form2中按下OK,然后调用Form2传递的方法+传递的参数,或者取消。

只是不知道哪种方式是最好的。我应该在Form1中传递论点并听吗?或者如果在Form2中调用了callMethod,那么真的尝试让它在Form1中工作吗?有人有主意吗?

提前感谢!

如何通过Form2的命令使Form1调用一个方法

您需要将form1的当前实例传递给构造函数,如我的第一条注释所示。否则它就是null,这就是null异常的来源。您应该会遇到编译错误,因为form2的构造函数需要一个参数,除非您有一个默认的不接受此处未显示的参数的构造函数。

在Form1中更改您的方法:

Form2 userF = new Form2(this); // pass this to the constructor
userF.Show();

this是指对象的当前实例,在本例中是调用Form2的Form1对象的当前示例。这将调用Form2的构造函数,该构造函数接受参数,并且null引用异常将消失。this关键字相当于VB.NET中的Me关键词(如果您熟悉的话)。

您可以使方法成为静态的,并通过调用来调用它

Form1.DoSomething();

根据您的需求,它是:

public Form2()
{
    InitializeComponent();
}
private static void buttonOK_Click(object sender, EventArgs e)
{
    Form1.DoSomething(parameters);
    Form.ActiveForm.Close();
}

Form1中的函数是这样的:

public static void xxx(string x)
{
    Console.WriteLine(x);
}

区别在于静态属性。