2011-03-18 50 views
0

我有一個MainForm,它是MDI容器。在MainForm中,我創建了2個新的表單,它們在buttonclick上打開 - Form1和Form2。還有第三種形式 - CommonFom,我應該能夠從Form1和Form2(在buttonclick上)打開。我需要第三個表格保存的信息,如果我Form1中& 2之間切換,所以我不能從Form1中創建它的新實例& 2. 我試圖做這樣的事情在MainForm中:創建新表單時將參數傳遞爲參數

CommonForm CF = new CommonForm(); 
Form1 x = new Form1(CF); 
Form2 y = new Form2(CF); 

後在Form 1和Form:

public MainForm(CommonForm theCF) 
     { 
      InitializeComponent(); 
     } 

...某處buttonclick

CF.show(); 

但它給我的錯誤在Form1上,比次ere不是對象CF的實例(在CF.Show()行) 那麼我該如何正確地做到這一點?

+0

準備使用My.Forms應用程序框架,它很好地處理了常見的表單,但C#似乎不支持這一點! – invert 2011-03-18 11:35:17

+0

很不清楚。爲什麼你沒有在構造函數中存儲* theCF *參數值?哪裏*精確*是Show()調用的位置?改進你的片段。 – 2011-03-18 14:01:15

回答

2

在開始時在Form1和Form2中聲明。 (因爲它的代碼所缺少的,我不知道編譯錯誤或運行時錯誤)

private Form CF; //The reason I've declared the type as Form is to have flexibility of having any form to show. 

修改每個Form 1和Form像這樣的構造函數。

public MainForm(CommonForm theCF)  
{ 
    this.CF = theCF; 
    InitializeComponent();   
} 

它應該解決您的問題。

+0

現在我有這個錯誤 - 錯誤字段初始值設定項不能引用非靜態字段,方法或屬性'mhmm.MainForm.CF'這是行Form1 x = new Form1(CF); – andree 2011-03-18 11:30:37

+0

使用'this.CF'而不是''mhmm.MainForm.CF' – 2011-03-18 11:34:06

+0

對不起,我不明白。我沒有在任何地方使用mhmm.MainForm.CF。那只是錯誤代碼。字段初始值設定項不能引用非靜態字段,方法或屬性'mhmm.MainForm.CF' – andree 2011-03-18 11:42:27

0

使用CommonForm作爲單:即提供CommonForm類型的static財產InstanceCommonForm類中,初始化它CommonForm構造。然後,您可以通過使用CommonForm.Instance訪問CommonForm。