winforms中的设计时范围

时间:2015-05-04 08:05:58

标签: c# winforms custom-component visualdesigner

我有一个关于如何在winforms应用程序中设置组件的问题,以便它们可以相互交互。但是我想用视觉设计师来设置它。

我所拥有的是一个名为myDataBase的组件和一个名为myDataTable的组件 现在,组件myDataTable具有myDataBase类型的属性。 所以在代码中我可以做到

myDataBase db = new myDataBase();
myDataTable dt = new myDataTable();
dt.DataBase = db;

组件myDataTable中的属性DataBase是公共的,因此我也可以使用可视化设计器来分配DataBase属性。

enter image description here

现在我的问题。 我有很多形式都有myDataTable的一个或多个组件。
我只想要myDataBase的一个实例。

我现在要做的是在主窗体上创建一个组件myDataBase dbMain = new myDataBase()。
在每个表单上,我必须将所有myDataTable组件的属性设置为此dbMain 我必须在代码中执行此操作,因为可视化设计器无法在主窗体上看到dbMain组件。

所以问题是,我可以在所有表​​单上创建可视设计器可见的组件myDataBase的一个实例,因此我可以使用可视化设计器来设置myDataTable组件的属性吗?

对于那些现在的Delphi,我想要像Delphi中的DataModule一样。

1 个答案:

答案 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的单身实施)