c#主表单显示子表单何时关闭

本文关键字:表单 何时关 显示 | 更新日期: 2023-09-27 18:01:58

我想关闭第二个表单并显示第一个表单,而不创建新对象。

frmMain Mainfrm = new Mainfrm();
Mainfrm.Show();
this.Close();

在我的主窗体上有针对程序某些用户的特殊编码,通过创建一个新对象,它抛弃了在应用程序启动时首次创建主机时主要创建的所有内容。

c#主表单显示子表单何时关闭

不要关闭主表单,而是隐藏它。执行this.Hide();,使其对用户不可见,并且您的主要表单数据将保留。您可以调用this.Show()来再次显示它,而无需创建新实例。

您考虑过将第二个表单显示为对话框吗?

从主形式:

new Form2().ShowDialog();

这会导致主表单保持打开状态,但是用户无法访问它,直到它关闭第二个表单。

在主表单

    private void button1_Click(object sender, EventArgs e) // to open form2
    {
        Form2 frm2 = new Form2(this);
        frm2.Show();
        this.Hide();
    }

in form2

private mainForm mainForm; //mainForm is the name of the Main form
    public Form2(mainForm mainForm) 
    {
        InitializeComponent();
        this.mainForm = mainForm;
    }
    private void button1_Click(object sender, EventArgs e)// to close form2 and show main
    {
        this.mainForm.Show();
        this.Close();
    }

您应该能够以相同的方式实例化另一个Windows窗体。让它成为模态或非模态,你应该没问题。您不会丢失其他表单中的信息。

对话框>

您希望主窗体在第二个窗体打开时隐藏吗?或者只是确保它还在那里。

在正常的事件过程中,在另一个表单中创建的表单会创建一种父子关系,所以当第二个表单关闭时,您应该会自动看到第一个表单。要在第一种表单中反映数据,就需要返回数据,这可以通过设置事件处理程序来完成。

如果关闭主窗体,则可以通过隐藏它来避免这种情况,然后在#2完成时取消隐藏它。

如果您使用的是Visual Studio,它可能把Application.Run (new Form1())在您的static void Main()。这会导致应用程序在Form1关闭时退出(所以这就是Form2不存在的原因)

您可以使用Application.Run()(不带参数),并在想要结束程序时显式调用Application.Exit