2012-04-01 53 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

相关问题