4

我尝试从另一种形式调用方法。我的尝试:

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

有人可以帮助我吗?我真的找不到我的错误,我已经找了很长时间了。

4

2 回答 2

36

您可能需要一个已打开表单的实例并从那里调用该方法,而不是创建一个新表单的实例。你可以试试:

if (System.Windows.Forms.Application.OpenForms["yourForm"] != null)
    {
        (System.Windows.Forms.Application.OpenForms["yourForm"] as Form1).Output();
    }

另外,您可以通过将事件代码放在单独的方法中,然后针对您的按钮单击事件或公共输出方法调用该方法来替换button3_Click(null,null)在您的方法中调用Output

于 2012-10-15T07:09:06.370 回答
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();
     }
}
于 2012-10-15T07:28:04.853 回答