如何通过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中工作吗?有人有主意吗?
提前感谢!
您需要将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);
}
区别在于静态属性。