从Form1打开Form2,从Form2关闭Form1

4

现在,我有两个表单,称为form1和form2,在form1中有一个按钮,当我点击它时,就会打开form2

问题:在form2中,我想创建一个按钮,当我点击它时,form2关闭并关闭form1。如何做?


5
把问题放在主题行里面,而不是说你有一个问题,这样怎么样? - Neil N
1
欢迎来到StackOverflow,hcemp!下次您会想把问题放在主题行中,类似于编辑已经有的方式。更多指南请参见此处:http://stackoverflow.com/faq 和此处:http://meta.stackexchange.com/questions/tagged/faq - Christian Mann
抱歉,我是新手,我的英语非常差。 - hcemp
8个回答

9

表单1:

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 frm = new Form2(this);
        frm.Show();
    }

表单2:

public partial class Form2 : Form
{
    Form opener;

    public Form2(Form parentForm)
    {
        InitializeComponent();
        opener = parentForm;
    }

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

1

这个有效:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Me.Hide()
    Form2.Show()

我知道我来晚了,但上面的代码是VB.net,而原帖询问的是C#代码(请参见标签)。 - na-no.

0

我曾经为我的项目做过这件事,关闭一个应用程序并打开另一个应用程序。

    System.Threading.Thread newThread;
    Form1 frmNewForm = new Form1;

   newThread = new System.Threading.Thread(new System.Threading.ThreadStart(frmNewFormThread));
this.Close();
        newThread.SetApartmentState(System.Threading.ApartmentState.STA);
        newThread.Start();

并添加以下方法。您的 newThread.Start 将调用此方法。

    public void frmNewFormThread)()
    {

        Application.Run(frmNewForm);

    }

0
//program to form1 to form2
private void button1_Click(object sender, EventArgs e)
{
    //MessageBox.Show("Welcome Admin");
    Form2 frm = new Form2();
    frm.Show();
    this.Hide();          
}

0
如果您想在不关闭表单2的情况下从表单2中关闭表单1,正如标题所示,那么您可以在创建表单2时将对表单1的引用传递给它,并使用该引用来关闭表单1。
例如,您可以添加一个

public class Form2 : Form
{
    Form2(Form1 parentForm):base()
    {
        this.parentForm = parentForm;
    }

    Form1 parentForm;
    .....
}

将字段和构造函数传递到Form2

如果您想按照问题的文本所示先关闭form2,然后再关闭form1,我建议采用Justin的答案,在关闭form2时向form1返回适当的结果。


0
private void button1_Click(object sender, EventArgs e)
{
      Form2 m = new Form2();
      m.Show();
      this.Visible = false;
}

0

你的问题比较模糊,但是你可以使用 ShowDialog 来显示第二个窗体。然后当你关闭第二个窗体时,传递一个 DialogResult 对象回来,让用户知道窗体是如何关闭的 - 如果用户点击了按钮,那么也要关闭第一个窗体。


有没有更简单的方法?我知道在VB.NET中,只需调用frmScores.show()或frmMain.hide()就可以了,但我从未接触过C#。 - Christian Mann
当然 - 然后您可以使用SiN的解决方案。 - Justin Ethier

0
在Form2的ButtonClick事件中加入以下代码:
this.close();

form1 应该拥有 form2 的对象。

您需要订阅 form2 的 Closing 事件。

在 closing 方法中放置代码。

this.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接