从Form1打开Form2,从Form2关闭Form1

现在,我有两个表单,名为form1和form2,在form1中有一个按钮,当我点击它,然后打开form2

问题:在form2中,我想在单击它时创建一个按钮,form2关闭,form1关闭。 这该怎么做

Form1中:

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(); } } 

这有效:

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

您的问题很模糊,但您可以使用ShowDialog来显示表单2.然后当您关闭表单2时,返回一个DialogResult对象以让用户知道表单是如何关闭的 – 如果用户单击该按钮,则关闭表单1 。

在form2.buttonclick上

 this.close(); 

form1应该具有form2的对象。

你需要订阅form2的Closing事件。

并在结束方法放

 this.close(); 

如果你只是想在不关闭form2的情况下从form2关闭form1,正如标题所示,那么你可以在创建它时将表单1的引用传递给表单2并使用它来关闭表单1

例如,你可以添加一个

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

Form2的字段和构造函数

如果你想首先关闭form2然后将form1作为问题的文本建议,我会选择Justins回答在关闭form2时将相应的结果返回到form1

我为我的项目做过一次,关闭一个应用程序并打开另一个应用程序。

  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); } 
 //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(); } 
 private void button1_Click(object sender, EventArgs e) { Form2 m = new Form2(); m.Show(); this.Visible = false; }