【问题标题】:How to open recently closed or hide form如何打开最近关闭或隐藏表格
【发布时间】:2013-01-11 08:41:05
【问题描述】:

我已经彻底研究过,但我仍然找不到最好的解决方案.. 我有 3 个按钮,BACK - HOME - FORWARD ..

这就像浏览器左上角的按钮.. 我试图在表单上执行此操作..

我有的是这个..

返回按钮代码是

private void button1_Click(object sender, EventArgs e)
{
    this.Hide();
}

// simply hiding the form .. so that the previous form will be shown.. 

主页按钮代码是这样的..

private void button2_Click(object sender, EventArgs e)
{
    for (int i = Application.OpenForms.Count - 1; i >= 0; i--)
    {
        if (Application.OpenForms[i].Name != "HomePage")
            Application.OpenForms[i].Close();
    }
} 

// this will show the HomePage form and close other forms whos name is not "HomePage"

问题是当我按下后退按钮时,我隐藏它.. 按钮如何重新打开以前关闭或隐藏的表单?

我希望你能帮助我!谢谢!

private void button3_Click(object sender, EventArgs e)
{
    ???????
}

【问题讨论】:

  • 你应该考虑用一个有意义的名字来命名你的按钮;)
  • 对不起.. 下次我发帖时我会这样做:)

标签: c# winforms forms forward


【解决方案1】:

您需要存储对要再次打开的表单的引用。

有几个选项可以做到这一点,但如果您只是想让用户“前进”一次,您可以像这样存储对表单的引用:

internal class MyHistory {
    internal static Form LastForm;
}

// ........

private void button1_Click(object sender, EventArgs e)
{
    MyHistory.LastForm = this;
    this.Hide();
}

// ........

private void button3_Click(object sender, EventArgs e)
{
    MyHistory.LastForm.Show();
}

当然,如果您想比这更全面,您可以维护完整的历史记录项并向后/向前遍历它们。

请注意,如果您.Close() 您的表单,您将无法重新打开它,因为引用将在关闭后被处理掉。此方法仅在您使用.Hide() 时才有效,它使表单实例保持有效,只是将表单从用户视图中隐藏起来。

【讨论】:

  • 好的,我从form1打开form2的代码会发生这种情况,我从form2打开form3我按下后退按钮,form3隐藏..但是当我向前按下“空引用异常未处理”错误..但是如果我从form2再次打开form3然后按前进..它会再次打开form3..我认为当我按下后退按钮时会发生什么,下一次按下是我历史记录中的记录..
  • @JurelJacinto 您是否更新了“返回”按钮代码以存储对表单的引用?如果你设置了它就不会为空。还要确保您使用的是Hide 而不是Close...
  • 是的,我做到了..这是我在“返回”按钮中的代码.. private void button1_Click(object sender, EventArgs e) { MyHistory.LastForm = this; this.Hide(); } 但这正是我所说的正在发生的事情..
  • 鲁迪爵士,知道为什么会这样吗?
  • @JurelJacinto 我能想到的唯一一件事是您在其他时间Closeing 表单,或者您没有更改您@的每个表单上的按钮987654327@ing.
【解决方案2】:

您可以使用包含所有已初始化表单的表单列表。这样您就可以动态地隐藏、显示、添加和删除表单。

List<Form> lstForms = new List<Form>();

那么当你添加一个表单时:

Form newForm = new Form();

lstForms.Add(newForm);

隐藏表单:

lstForms(x).Hide(); //x = index of Form you want to hide

显示表单

lstForms(x).Show(); //x = index of Form you want to hide

移除表单(例如关闭表单时)

lstForms.RemoveAt(x);

这样您可以动态处理表单,如果您有许多表单,则更容易保持概览...

【讨论】:

    猜你喜欢
    • 2016-01-21
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多