2013-04-24 50 views
0

我想爲我的模塊做一個簡單的項目。我爲我的程序製作了一個登錄系統,這個想法是禁用了菜單欄控件,直到用戶輸入正確的細節並提交。到目前爲止,這是我想出了,是主要形式有:C#訪問形式之間的公共方法

public void setControlDisabled() 
    { 
     fileToolStripMenuItem.Enabled = false; 
     clientsToolStripMenuItem.Enabled = false; 
     dVDsToolStripMenuItem.Enabled = false; 
     windowsToolStripMenuItem.Enabled = false; 
    } 

    public void setControlEnabled() 
    { 
     this.fileToolStripMenuItem.Enabled = true; 
     this.clientsToolStripMenuItem.Enabled = true; 
     this.dVDsToolStripMenuItem.Enabled = true; 
     this.windowsToolStripMenuItem.Enabled = true; 
    } 

而下面的代碼是在我的登錄表單除其他代碼:

private void btnLogin_Click(object sender, EventArgs e) 
{ 
      //other code 
      Form1 form = new Form1(); 
      form.setControlEnabled(); 
} 

的禁用部分工作正常,甚至如果我在它顯示的setControlEnabled方法中放置一個小的MessageBox,但它不啓用菜單欄。

PS。菜單欄上的登錄仍處於啓用狀態。

回答

0

這可能是因爲您需要存儲對錶單的引用並使用它。不要重新創建表單,否則您正在與不同的實例進行交談,該實例將啓用其項目。如果您在當前的代碼中調用form.Show(),你會看到這個

這裏是你如何處理這個:

Form1 otherForm; 
Form1 OtherForm 
{ 
    get 
    { 
     //If the form is requested but not created yet, create it 
     if(otherForm == null) 
      otherForm = new Form1(); 
     return otherForm; 
    } 
} 

private void btnLogin_Click(object sender, EventArgs e) 
{ 
      //other code 
      OtherForm.setControlEnabled(); 
} 

酒店懶洋洋地處理表單的創建。如果它已經創建,那麼它只是返回該實例,否則它會創建一個新實例並返回該實例。不過,它會堅持這個參考。因此,您需要有一個清晰的方法或setter,以便您可以將其設置爲null,如果它關閉並且您希望它完全移除。

0

看起來好像您的Form1實例在本地範圍內爲您的btnLogin_Click方法,而不是全局實例。在Class聲明中聲明Form1實例,即:

public class Form2 
    private Form1 form = new Form1(); 

    public Form2() 
    { 
     form.Show(); 
    } 

    private void btnLogin_Click(object sender, EventArgs e) 
    { 
     form.setControlEnabled(); 
    } 
} 
相關問題