从另一种形式调用方法

问题描述:

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

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

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

+1

那么错误信息是什么? –

+0

没有错误消息,但输出不在调试器中执行 – BudBrot

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

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

加上可以更换调用button3_Click(null,null)Output方法,通过将事件的代码放在一个单独的方法,然后调用针对您的按键点击事件或您的公共输出方法

该方法
+4

它的工作原理..我从来没有听说过类Application.Openforms ...感谢您的:) – BudBrot

+0

@Pengu,欢迎您,[Application.OpenForms](http ://msdn.microsoft.com/en-us/library/system.windows.forms.application.openforms.aspx)是Application类的一个属性 – Habib

+1

+1我也从来没有听说过Application.OpernForms [“”],必须在你的新项目中学习;)。 –

您在致电output方法后立即关闭Form1。因此,我假设,您在那里有一些业务相关或数据访问逻辑。试图移动代码,这是在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(); 
    } 
} 
+0

也是一个非常好的解决方案。谢谢 – BudBrot