2010-04-28 56 views

回答

2

您必須確保您只創建了1個Form2實例。要做到這一點的方法之一是對象的聲明和實例遷移到私有變量,並在點擊事件處理程序只需調用Show()方法:

private Form2 f2 = new Form2(); 
private void Button1_Click (object sender, EventArgs e) 
(
    if(f2 == null) 
    { 
     f2 = new Form2(); 
    } 
    f2.Show(); 
) 
+0

當我關閉窗口2,然後嘗試打開,錯誤:訪問對象不能被佈置 – Saska 2010-04-28 05:50:02

+0

@Saska的 - 你可能要檢查如果您單擊事件窗口2爲null。答案已更新。 – Oded 2010-04-28 05:51:28

1

假設你的主窗體類是MyForm的,如下更新你的代碼。這個想法是隻保留Form2的單個實例。

public partial class MyForm: Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 
    } 

    private Form2 f2; 
    private void Button1_Click (object sender, EventArgs e) 
    ( 
     if (null == f2 || f2.IsDisposed) 
      f2 = new Form2(); 

     f2.Show(); 
    ) 
} 
0

如果Visible屬性會爲表工作,我沒有檢查,但你可以試試這個。

public partial class MyForm: Form 
    { 
     public MyForm() 
     { 
      InitializeComponent(); 
     } 

     Form2 f2 = null; 
     private void Button1_Click (object sender, EventArgs e) 
     ( 
      if(f2 == null) 
       f2 = new Form2(); 
      if(!f2.Visible) 
       f2.Show(); 
     ) 
    } 
+0

非常感謝你 – Saska 2010-04-28 05:58:30

2

現有的答案相似,但有一個額外的事件處理程序:

private Form f2 = null; 
private void Button1_Click (object sender, EventArgs e) 
{ 
    if (f2 == null) 
    { 
     f2 = new Form2(); 
     // Make sure we don't try to re-show a closed form 
     f2.FormClosed += delegate { f2 = null; }; 
    } 
    f2.Show(); 
} 
0

此代碼將打開窗體。 如果以前沒有在應用程序中運行。

private void button1_Click(object sender, EventArgs e) 
    { 
     bool result = false; 

     foreach (Form form in Application.OpenForms) 
     { 
      if (form.GetType() == typeof(Form2)) 
       result = true; 
     } 

     if (result == false) 
      new Form2().Show(); 
    } 
相關問題