2012-04-01 56 views
-1

我有兩種形式,我想調用在Form2的界面中定義的Form1的功能。我嘗試使用代表和事件。有沒有更好的方法來做到這一點?如何從另一個表單調用一個表單中定義的函數?

Form1中

namespace atszodidb 
{ 
    public partial class Form1 : Form 
    { 

    } 
} 

interface db 
{ 
    void func(string param); 
} 

class db_veiksmai : db // veiksmai = actions 
{ 

    public db_veiksmai() 
    { 

    } 

    public void func(string param) 
    { 
     MessageBox.Show(param); 
    } 
} 

窗體2

namespace atszodidb 
{ 
    public partial class Form2 : Form 
    { 
     void function() 
     { 

     } 
    { 
} 

如何調用從功能void function()void func(string param)?我試圖用一個委託來做到這一點:

的Program.cs

public static class Data 
{ 
    public delegate void MyEvent(string data); 
    public static MyEvent EventHandler; 
} 

Form2

Data.EventHandler("lalalal"); 

不過,我不知道在哪裏寫Data.EventHandler = new Data.MyEvent(func);。我嘗試了class db_veiksmai的構造函數,但這是一個糟糕的解決方案。

+0

我不明白你想達到什麼目的。 – ivowiblo 2012-04-01 15:40:57

+0

請參閱Form1中我有與數據庫(插入,刪除)工作的函數,在Form2中我有必須發送到FORM1並插入到數據集的數據,現在瞭解我了嗎? – Wizard 2012-04-01 15:45:21

+0

但你的意思是form1文件或類? – ivowiblo 2012-04-01 16:17:19

回答

3

您需要一個類的實例才能調用實例方法。所以:

public partial class Form2 : Form 
{ 
    void function() 
    { 
     db_veiksmai mydb = new db_veiksmai(); 
     mydb.func("some parameter"); 
    } 
} 

或你的窗體2把接口作爲一個構造函數依賴:

public partial class Form2 : Form 
{ 
    private readonly db _mydb; 
    public Form2(db mydb) 
    { 
     _mydb = mydb; 
    } 

    void function() 
    { 
     _mydb.func("some parameter"); 
    } 
} 

,現在將窗體2的消費者的責任,通過具體的實施db構建Form2時。

備註:在.NET中作爲約定接口名稱以I開頭,而db是接口名稱很差的。

+0

我不能這樣使用,因爲是接口 – Wizard 2012-04-01 15:43:12

+1

@ user1069874,當然可以。在第一種情況下,您直接使用具體的實現('db_veiksmai'),而在第二個示例中,Form2的調用者負責提供特定的實現,從而將Form2中的代碼從特定實現中解耦。 – 2012-04-01 15:44:26

+0

+1用於找出語法上的問題。 – 2012-04-01 15:44:48

相關問題