2012-10-15 117 views
3

我嘗試從另一種形式調用方法。我嘗試:從另一種形式調用方法

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

回答

30

而不是創建一個新的窗體的實例,你可能需要一個已經打開的窗體的實例,並從那裏調用該方法。你可以試試:

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 [「」],必須在你的新項目中學習;)。 –

2

您在致電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