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

本文关键字:显示 新显示 窗体 Windows 关闭 | 更新日期: 2023-09-27 18:31:35

当我单击按钮时,会打开一个表单,但如果表单已经打开,那么应用程序应该显示消息"表单已经打开!"并且不执行任何其他操作。

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

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

当按下"关闭"按钮时,您希望它只是"隐藏"表单...您需要使用e.Cancel来阻止它继续和关闭。

如果您真的想关闭Form2窗口,而不是在应用程序运行时隐藏它......然后打电话给ReallyClose....这样关闭就不会被阻止(然后创建一个新decript_form或将其null出来)。

(或者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();
    }
}

我假设您谈论的是按下 Form2 上的 [x]。在这种情况下,您应该在 Form2() 中处理关闭事件并添加

 this.Hide();

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

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