[英]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.