2013-07-06 141 views
-1

我使用C#.NET 2.0和Oracle 10g在關閉時與當已經打開

我從窗體名稱FORM1用的MenuStrip

做窗口的應用程序不應該再次打開如何打開窗體第二次FORM1的菜單欄,我打開另一個窗體FORM2並關閉相同的FORM2後使用它 ,但如果我點擊該第二次它不顯示

我還添加了代碼,如果用戶按下相同的menutrip按鈕第二次在關閉相同的FORM2之前,它不應該打開並且將已經打開的FORM2集中到

編輯::
首次嘗試-----------------

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    FORM2 f2 = Application.OpenForms["FORM2"] as FORM2 ; 
    if (f2 != null) 
    { 
     f2 .WindowState = FormWindowState.Normal; 
     f2 .BringToFront(); 
     f2 .Activate(); 
    } 
    else 
    { 
     f2 = new FORM2(); 
     f2.Show(); 
    } 
} 

第二次嘗試------------- -

private void FORM2_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    this.Hide(); 
    e.Cancel = true; 
} 

與此代碼,我能夠當用戶點擊的MenuStrip多次..我不想打開同一FORM2多次這樣的事情發生

第三次嘗試-------- ----

private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    FORM f2 = new FORM2(); 
    f2.Show(); 
} 

此代碼也做同樣的作爲第二次嘗試

第四嘗試--------------

private FORM2 f2 = null; 
private void openToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (f2 == null) 
    { 
     f2 = new FORM2(); 
    } 
    f2.Show(); 
    f2.Activate(); 
} 

我已經嘗試了所有的上述編碼但我不能得到我期待的..你能找到人&幫我什麼,我在這裏失蹤..

+4

你能分享你的代碼嗎? – bansi

+0

作爲bansi指出,它會幫助我們回答你的問題,如果你發佈你的代碼供我們審查 – sipp

+0

第一次嘗試 ----------------- private void openToolStripMenuItem_Click(object發件人,EventArgs e) { FORM2 f2 = Application.OpenForms [「FORM2」] as FORM2; (f2!= null) f2 .WindowState = FormWindowState.Normal; f2 .BringToFront(); f2 .Activate(); } else { f2 = new FORM2(); f2。顯示(); } } – kumartyr

回答

2

Application.OpenForms集合是不可靠的。當您更改表單的某些屬性時,窗體實例將從該集合中消失,而不會出現任何痕跡,如ShowInTaskbar屬性。這是Winforms中的一個衆所周知的錯誤,這是您無法獲得原始工作的可能原因。

可靠的選擇是跟蹤自己的表單實例的生命。像這樣:

private Form Form2Instance; 

    private void openToolStripMenuItem_Click(object sender, EventArgs e) { 
     if (Form2Instance == null) { 
      Form2Instance = new FORM2(); 
      Form2Instance.FormClosed += (s, ea) => Form2Instance = null; 
     } 
     Form2Instance.WindowState = FormWindowState.Normal; 
     Form2Instance.Show(); 
     Form2Instance.BringToFront(); 
    } 

偵聽FormClosed事件並將引用設置爲null是解決方案的關鍵部分。

+0

感謝您的時間..將檢查並回來2你 – kumartyr

相關問題