2015-05-04 64 views
0

我有一個關於如何在WinForms應用程序中設置組件以便它們可以相互交互的問題。但我想用視覺設計師來設置它。winforms中的Designtime範圍

我所擁有的是一個名爲myDataBase的組件和一個名爲myDataTable的組件。
現在,組件myDataTable具有myDataBase類型的屬性。 所以在代碼中,我可以做

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

在組件myDataTable屬性數據庫是公開的,所以我也可以使用可視化設計器來分配數據庫屬性。

enter image description here

現在我的問題。 我有很多很多的表單上有一個或多個myDataTable的組件。
我只想要一個myDataBase實例。

我現在所做的是在mainform上創建一個組件myDataBase dbMain = new myDataBase()。
在每個表單上,我必須將所有myDataTable組件的屬性設置爲此dbMain。
我必須在代碼中執行此操作,因爲可視化設計器無法在mainform上看到dbMain組件。

所以問題是,我可以創建一個組件myDataBase的實例,它對所有窗體上的可視化設計器都是可見的,所以我可以使用可視化設計器來設置myDataTable組件的屬性?

對於那些現在Delphi,我想要的東西就像Delphi中的DataModule。

回答

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實現)

+0

個人而言,我更喜歡['懶惰'](https://msdn.microsoft.com/en-us/library/dd64 2331%28v = vs.110%29.aspx)創建單身人士;-) –

+1

@UweKeim:好的:)我也是這樣。 –

+0

我所有的表單都是基礎表單的後代,所以我可以輕鬆實現這一點。但是,視覺設計師能夠在繼承的表單上看到屬性myDataBase嗎? – GuidoG