2012-04-01 10 views
-1

私は2つのフォームを持っていて、インターフェイスに定義されたForm1という関数をForm2から呼び出したいとします。私は代理人とイベントを使ってみました。これを行うより良い方法はありますか?フォームで定義された関数を別のフォームから呼び出す方法はありますか?

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

Form2の

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

+0

Form1で私はデータベース(挿入、削除)で動作する関数をForm2に持っています。私はFORM1に送信しなければならないデータを持っています。 – Wizard

+0

あなたはform1ファイルまたはクラスを意味しますか? – ivowiblo

答えて

3

インスタンスメソッドを呼び出すには、クラスのインスタンスが必要です。だから、:

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

またはあなたのForm2のは、コンストラクタ依存性としてインターフェイス取る持っている:

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

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

をし、今ではForm2を構築するときdbの特定の実装を渡すためのForm2の消費者の責任になります。

備考:従来のインターフェイス名では、.NETではIで始まり、dbはインターフェイスの名前が非常に貧弱です。

+0

インターフェイスは – Wizard

+1

@ user1069874なので、私はこのように使うことはできません。最初のケースでは具体的な実装( 'db_veiksmai')で直接作業していますが、2番目の例では特定の実装を提供しForm2のコードを特定の実装から分離するのはForm2の呼び出し側の責任です。 –

+0

+1は文法にもかかわらず質問を理解するためのものです。 –

関連する問題