簡體   English   中英

WinForms中的設計時范圍

[英]Designtime scope in winforms

我有一個關於如何在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的東西。

您不能沒有一些代碼。

就我而言,您可以做的最簡單的事情是創建一個從Form派生的基本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; } }
}

(從這里開始實現)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM