我有一个关于如何在winforms应用程序中设置组件的问题,以便它们可以相互交互。但是我想用视觉设计师来设置它。
我所拥有的是一个名为myDataBase的组件和一个名为myDataTable的组件 现在,组件myDataTable具有myDataBase类型的属性。 所以在代码中我可以做到
myDataBase db = new myDataBase();
myDataTable dt = new myDataTable();
dt.DataBase = db;
组件myDataTable中的属性DataBase是公共的,因此我也可以使用可视化设计器来分配DataBase属性。
现在我的问题。
我有很多形式都有myDataTable的一个或多个组件。
我只想要myDataBase的一个实例。
我现在要做的是在主窗体上创建一个组件myDataBase dbMain = new myDataBase()。
在每个表单上,我必须将所有myDataTable组件的属性设置为此dbMain
我必须在代码中执行此操作,因为可视化设计器无法在主窗体上看到dbMain组件。
所以问题是,我可以在所有表单上创建可视设计器可见的组件myDataBase的一个实例,因此我可以使用可视化设计器来设置myDataTable组件的属性吗?
对于那些现在的Delphi,我想要像Delphi中的DataModule一样。
答案 0 :(得分:1)
你不能没有一些代码。
就我而言,你可以做的最简单的事情就是创建一个基本表单,从Form
派生,并以该形式创建一个指向数据库对象的单例实例的属性。您可以绑定到该属性,并尽可能保持简单。
您只需要将您的表单从这一个派生出来:
public class DatasourceForm : Form
{
public myDataBase DataBase
{
get
{
return myDataBaseFactory.Current;
}
}
}
负责创建单例数据库实例的工厂:
public class myDataBaseFactory
{
private static readonly Lazy<myDataBase> lazy =
new Lazy<myDataBase>(() => new myDataBase());
public static myDataBase Current { get { return lazy.Value; } }
}
(来自here的单身实施)