我尝试从另一种形式调用方法。我的尝试:
public partial class newLedPopUp : Form
{
Form1 back = new Form1();
back.output();
Close();
}
和
public partial class Form1 : Form
{
newLedPopUp popup = new newLedPopUp();
public void output()
{
button3_Click(null, null);
}
}
有人能帮助我吗?我真的找不到我的错误,而且我一直在找很长时间。
答案 0 :(得分:31)
您可能需要一个已打开表单的实例,并从那里调用该方法,而不是创建新表单的实例。你可以尝试:
if (System.Windows.Forms.Application.OpenForms["yourForm"] != null)
{
(System.Windows.Forms.Application.OpenForms["yourForm"] as Form1).Output();
}
另外,您可以替换调用button3_Click(null,null)
方法中的Output
,方法是将事件代码放在单独的方法中,然后针对按钮点击事件或公共输出方法调用该方法< / p>
答案 1 :(得分:2)
您在调用Form1
方法后立即关闭output
。因此,我假设您在那里有一些与业务相关或数据访问的逻辑。尝试将在button3_Click
事件处理程序上执行的代码移动到单独的对象
public class Foo
{
public void Output()
{
// move here button3_Click code
}
}
然后创建Foo并将其传递给两个表单(或者您可以在不依赖注入的情况下在表单中实例化它)
Foo foo = new Foo();
Form1 form1 = new Form1(foo);
LedPopUp form2 = new LedPopUp(foo);
并像这样使用它:
public partial class Form1 : Form
{
private Foo _foo;
// without dependency injection: private Foo _foo = new Foo();
public Form1(Foo foo)
{
_foo = foo;
}
protected void button3_Click(object sender, EventArgs e)
{
_foo.Output();
}
}