2016-01-24 55 views
-2

當我單擊按鈕時,表單已打開,但如果表單已經打開,則應用程序應顯示消息「窗體已經打開!」。並沒有別的辦法。無法在關閉它後重新顯示Windows窗體

我的問題是,一旦我關閉了窗口[x],我無法再打開窗體。

下面的代碼:

Form2 decript_form = new Form2(); 
private void button2_Click(object sender, EventArgs e) 
{ 
    if (!decript_form.Visible) 
      decript_form.Show(); 
    else 
      MessageBox.Show("Form already open!"); 
} 
+0

你可以重寫關閉事件處理程序,而是隱藏窗體 –

回答

0

我假設你談上按下[X]窗體2。這就是你應該在Form2()中處理Closing事件的情況,並向處理程序添加

this.Hide(); 

。即使封閉的窗口仍然「顯示」,直到隱藏。

class Form2 
{ 
    override protected void OnClosing(CancelEventArgs e) 
    { 
      Hide(); 
    } 
} 
+0

是的,我說的是在窗口2 [X]。我必須添加this.Hide()? –

+0

@PietroAriano我已經改變了我的答案給你一個更詳細的解釋 –

2

當按下「關閉」按鈕,你希望它只是「隱藏」的形式......你需要使用e.Cancel停止了怎麼回事和關閉。

如果你真的要關閉Form2窗口,而不是隱藏它的應用程序運行時....然後調用ReallyClose ....從而使接近沒有阻止(然後創建一個新decript_formnull出來)。

(或者decript_form.Dispose()將迫使真正的封閉太)

public partial class Form2 : Form 
{ 
    private bool m_bReallyClose = false; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void Form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (!m_bReallyClose) 
     { 
      this.Visible = false; 

      e.Cancel = true; 
     } 
    } 

    public void ReallyClose() 
    { 
     m_bReallyClose = true; 

     this.Close(); 
    } 
} 

public partial class Form1 : Form 
{ 
    Form2 decript_form = new Form2(); 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (!decript_form.Visible) 
      decript_form.Show(); 

     else 
      MessageBox.Show("Form already open!"); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     decript_form.Dispose(); // or .ReallyClose(); 
     decript_form = new Form2(); 
    } 
} 
+0

我添加了你的代碼,但是,問題仍然存在,如果我嘗試用按鈕重新打開窗體告訴我:無法訪問已刪除的對象 –

+0

如上面Form1所示使用 –

+0

謝謝!工作:) –