关闭后无法重新显示Windows窗体

时间:2016-01-24 09:09:12

标签: c# winforms visual-studio-2015

单击按钮时,表单会打开,但如果表单已打开,则应用程序应显示消息“表单已打开!”什么都不做

我的问题是,一旦我关闭窗口[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!");
}

2 个答案:

答案 0 :(得分: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();
    }
}

答案 1 :(得分:0)

我假设你谈到Form2被按下的[x]。这就是你应该在Form2()中处理Closing事件并添加

的情况
 this.Hide();

到处理程序。即使是关闭的窗口仍然“显示”,直到它被隐藏。

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