2013-06-01 159 views
0
private void button1_Click(object sender, EventArgs e) 
    { 
     Form2.Show(); 
    } 

我有上面的代碼,在我看來,它包含沒有錯誤,但它不會由於某種原因執行。 它說錯誤「對象引用是非靜態字段,方法或屬性所必需的」,但我錯過了什麼? 我只有兩種形式(Form1和Form2)和一個按鈕。我使用了註冊表清理器,但錯誤仍然存​​在。 它存在另一個工作的代碼,但是這個代碼使得我的表單作爲一個新變量的副本,但是我想顯示出像Visual Basic那樣的原始表單。當我按下Form1中的按鈕時,如何顯示Form1中的原始Form2?#

+0

'(新窗體2())顯示();' – Damith

+0

你必須忘掉你vb.net拾起一些壞習慣。像這樣,你不能調用像Show()這樣的實例方法而不提供對象的引用。不幸的是,VB.NET在Form類的特定情況下允許這樣做,從而使VB6程序員在編寫Winforms代碼時有所斬獲。在C#中完成了,你必須使用* new *運算符來創建類的新實例。 –

回答

1

除了在類別級別存儲對錶單的引用外,還需要檢查自上次使用後是否已關閉表單。在這種情況下,你需要創建一個新的實例(就像你第一次使用的那樣)。下面的例子也恢復的形式,如果它是最小化:

public partial class Form1 : Form 
{ 

    Form2 F2 = null; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (F2 == null || F2.IsDisposed) 
     { 
      F2 = new Form2(); 
      F2.Show(); 
     } 
     else 
     { 
      if (F2.WindowState == FormWindowState.Minimized) 
      { 
       F2.WindowState = FormWindowState.Normal; 
      } 
      F2.Activate(); 
     } 
    } 

} 
1

Form2或Form1只是類的名稱。使用這個類之前,你需要創建它們的實例

Form2 secondaryForm = new Form2(); 

在此之後,你可以使用這個類的所有方法和屬性secondaryForm.Show();

因此,使用/顯示你的窗體2之前,你需要創建一個實例。如果你想顯示

您的原始形式

,meens該實例已創建。你需要檢查你的代碼在其中創建該實例並提出參考該形式變量:

創建Form1中的變量:

private Form2 secondaryForm; 

在創建已經在你原來的窗體2只使用這個變量的代碼:

this.secondaryForm = new Form2(); 

在Form1的代碼這種隨時隨地可以顯示窗體2與下一行後:

this.secondaryFomr.Show();