如何从另一个表单调用一个表单中定义的函数?
我有两种形式,我想调用在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
的构造函数,但这是一个糟糕的解决方案。
您需要一个类的实例才能调用实例方法。所以:
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
是接口名称很差的。
我不能这样使用,因为是接口 – Wizard 2012-04-01 15:43:12
@ user1069874,当然可以。在第一种情况下,您直接使用具体的实现('db_veiksmai'),而在第二个示例中,Form2的调用者负责提供特定的实现,从而将Form2中的代码从特定实现中解耦。 – 2012-04-01 15:44:26
+1用于找出语法上的问题。 – 2012-04-01 15:44:48
我不明白你想达到什么目的。 – ivowiblo 2012-04-01 15:40:57
请参阅Form1中我有与数据库(插入,删除)工作的函数,在Form2中我有必须发送到FORM1并插入到数据集的数据,现在了解我了吗? – Wizard 2012-04-01 15:45:21
但你的意思是form1文件或类? – ivowiblo 2012-04-01 16:17:19