0

我有一个关于如何在 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 之类的东西。

4

1 回答 1

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

这里的单例实现)

于 2015-05-04T08:15:04.470 回答