打开最后一个活动窗体 C#

open last active form C#

您好,我是 C# 的新手,正在为新手创建故障排除培训指南,因此将创建许多表单。我目前正在使用一个简单的打开新表单并隐藏当前运行良好的代码。在每个表单上,我都有一个下一个和上一个 link 标签。我现在 运行 遇到的问题是我有两种形式导致相同的形式,而我使用的代码只会转到一种形式。

这是我正在使用的:

private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
  Home myNewForm = new Home();
  myNewForm.Visible = true;

  this.Hide();
}

所以我的问题是如何从当前表单切换回上一个活动表单而不是上面代码中的设置表单?

您要打开的表单

 public partial class Form3 : Form
{
    public Form FormName { get; set; }
    public Form3()
    {
        InitializeComponent();
    }
    public Form3(Form fromName)
    {
        FormName = fromName;
        InitializeComponent();
    }
    private void BackToFrom(object sender, EventArgs e)
    {
        FormName.Show();
        this.Hide();
    }
}  

这就是您从 Form2 和 Form1 到 Form3 再回到第一名的方法
在 Form1 中写这个方法

  private void ShowForm3(object sender, EventArgs e)
    {
        new Form3(new Form1()).Show();
        this.Hide();
    }

在Form2中重新写一遍,但改变参数

  private void ShowForm3(object sender, EventArgs e)
    {
        new Form3(new Form2()).Show();
        this.Hide();
    }

注意

此代码未经测试 - 可能包含一些拼写错误

我会为它创建一个接口,但为了让它更简单 - 创建一个 class,它可以用额外的 DateTime 属性 扩展表单(它也可以是某种布尔值)。如下图:

public class FormExtended{
    public Form _form{get;set;}
    public DateTime lastActive {get;set;}
    ...
}

稍后为每个表单创建此 class 的实例。例如:

public FormExtended CreateNewForm()
{
    var extension = new FormExtended();
    extension._form = new YourForm();
    extension.lastActive = DateTime.Now;
    listOfForms.Add(extension); //listOfForms - some kind of global list to hold all instances
    return extension;

    //if you want to You can make it void and just show the form without return
    //extension._form.Show();

}

现在在调用方法中,您可以使用 linq 和 showit 找到最新的活动:

public void showLastActiveForm()
{
    var latestForm = listOfForms.OrderByDescending(x => x.lastActive).Take(1);
    latestForm._form.Show();
}