2014-02-06 13 views
0

我創建一個小的軟件時。 我有三種形式讓我頭痛。其中兩種形式是單身人士。辛格爾頓的構造運行改變形式

的形式不是一個Singleton是一個登錄表單其僅假定要顯示的應用程序啓動時。然後當登錄表單中輸入正確的用戶名和密碼時,我會看到一個mainform。這工作。

然後從MenuStrip中,您可以切換到包含用戶列表和這些的一些信息的另一種形式。在該表單上,我有一個可以將您帶回到mainform的按鈕。當我按下該按鈕時,不再直接將我帶回到mainform,而是再次向我呈現登錄表單。

代碼觸發從的MenuStrip項點擊,帶你從MainForm的用戶窗體:

private void miBrugere_Click(object sender, EventArgs e) 
    { 
     userForm = Userform.Instance; 
     this.Hide(); 
     userForm.Show(); 
    } 

代碼,它應該把你從用戶窗體和回的MainForm:

private void btnBack_Click(object sender, EventArgs e) 
    { 
     Mainform mainForm = Mainform.Instance; 
     this.Hide(); 
     mainForm.Show(); 
    } 

private void Mainform_Load(object sender, EventArgs e) 
    { 
     if (firstLoad) 
     { 
      firstLoad = false; 
      Loginform loginForm = new Loginform(); 
      this.Hide(); 
      loginForm.ShowDialog(); 
     } 
    } 

的firstLoad VARI:那我的MainForm的負荷運行

代碼能夠在全班範圍內。打電話時

public Userform() 
    { 
     InitializeComponent(); 
     dgvUsers.AllowUserToAddRows = false; 

     Mainform mainForm = Mainform.Instance; 
     connString = mainForm.connString; 

     --Awesome stuff-- 
    } 

而且很顯然,:

在此先感謝:-)

我熬下來的時候我在我的用戶窗體首次創建一個實例運行此代碼Mainform.instance,該實例爲null,因此它創建了一個新的mainform實例,而不是檢索已經使用的實例。當然,這意味着由於firstLoad是一個全班範圍的變量,所以它會再次設置爲true。

+1

如何'Mainform.Instance'實施? – sloth

+0

@DominicKexel公共靜態的MainForm實例 { 得到 { 如果(例如== NULL){ 例如 =新的MainForm(); } return instance; }} –

+0

你在你的代碼分配_firstLoad = true_?哪裏? – BitExodus

回答

0

請問你的主入口點的應用程序(通常在主要 方法Program.cs中爲新創建的Windows窗體應用程序) 樣子?如果它是像Application.Run(新的Mainform()), 那麼你的Mainform不是一個單例。你可能想嘗試 Application.Run(Mainform.Instance)

答案來自Corak,所以道具給他!

+1

很高興我可以幫忙^ _ ^。重點是''你的Mainform不是一個單身人士'''。正如@BitExodus指出的那樣,構造函數需要是私有的,才能成爲一個「真正的」單例。 – Corak