如何从另一个表单中调用表单中定义的函数?

时间:2012-04-01 15:38:21

标签: c# winforms interface

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

窗体2

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

        }
    {
}

如何从功能void func(string param)拨打void function()?我试图与代表这样做:

的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的构造函数,但这是一个糟糕的解决方案。

1 个答案:

答案 0 :(得分: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");
    }
}

现在,在构建db时,Form2的使用者有责任传递Form2的具体实现。

备注:在.NET中作为约定接口名称以I开头,而db是一个非常差的接口名称。