【问题标题】:C# hide form2 and reopen it without overrideC#隐藏form2并重新打开它而不覆盖
【发布时间】:2016-05-21 21:28:27
【问题描述】:

嘿嘿, 我有两种形式:form1form2。 当我按下 form1 中的按钮时,我想打开 form2 并且 form1 仍然可见。

form1 中的代码:

private void button_Click_1(object sender, EventArgs e) 
{
 form2 form = new form2();   
 form.Show();
}

当我在form2 中按下 [x](关闭按钮)时,我想隐藏它。

form2 中的代码:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason == CloseReason.UserClosing) 
    {
        e.Cancel = true;
        Hide();
    }
}

问题是当我再次按下来自form1 的button1 时。它打开form2,但就像它没有被隐藏一样,它像第一次一样打开它。我不想关闭form2,因为它是一个计时器,它在表单隐藏时计数。当我按 [x] 时如何隐藏form2,然后当我再次按 button1 时重新出现,而不是像第一次那样重新打开? 谢谢!

【问题讨论】:

    标签: c# forms show-hide


    【解决方案1】:

    当您编写 form2 form = new form2() 时,您会创建它的另一个实例,因此您必须保存该实例并使用它:

    private Form form;
    private void button_Click_1(object sender, EventArgs e)
    {
         if(form==null)
             form = new Form2();
    
         form.Show();
    }
    

    【讨论】:

    • 好的,我明白了,但是当我再次按下 form1 中的按钮时出现错误。错误:“无法访问已处置的对象”,它出现在 form.Show();在表格1
    • 我相信如果你真的按照你在问题中所说的去做,你的 form2 实例不应该被处理,即设置FormClosingEventArgs.Cancel = true 并调用Form.Hide()
    • 所以我必须在 form2 表单关闭中进行一些更改?有我的问题吗?相信我,我对这个问题进行了大量研究,到目前为止我已经尝试了很多方法。
    • @RuslanPopescu :你确定你真的订阅了FormClosing 事件吗?您的代码应该可以工作,除非您只是在其中复制了一个 FormClosing 方法(因为复制粘贴还不够)。
    • 表格2是我在问题中写的
    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2011-04-19
    • 2010-10-25
    相关资源
    最近更新 更多