2016-01-24 59 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

谢谢!工作:) –