从另一个表单调用方法

时间:2012-10-15 07:06:11

标签: c# winforms

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

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

有人能帮助我吗?我真的找不到我的错误,而且我一直在找很长时间。

2 个答案:

答案 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();
     }
}