1

我有两种形式,FormA 和 FormB。

FormA 有两个按钮,一个用于打开 FormB,一个用于退出。
FormB 有一个按钮,用于关闭 FormB 并重新打开 FormA。

我的代码是这样的:

public class FormA
{
    private void btnOpenformB_Click(System.Object sender, System.EventArgs e)
    {
        FormB B = new FormB();
        this.Hide();
        B.Show();
    }
    private void btnExit_Click(System.Object sender, System.EventArgs e)
    {
        this.Close();
    }
}

public class FormB
{
    private void btnReopenA_Click(System.Object sender, System.EventArgs e)
    {
        FormA A = new FormA();
        this.Close();
        A.Show();
    }
}

我的问题是当我单击 FormB 上的按钮重新打开 FormA 时,当我单击 FormA 上的退出按钮时,它不会停止调试。我应该怎么办?谢谢!

4

5 回答 5

2
public class FormA {
  private void btnOpenformB_Click(System.Object sender, System.EventArgs e) {
    FormB B = new FormB();
    this.Hide();
    B.Show(this);//Note we pass in the Owner here
  }
  private void btnExit_Click(System.Object sender, System.EventArgs e) {
    this.Close();
  }
}

public class FormB {
  private void btnReopenA_Click(System.Object sender, System.EventArgs e) {
    if(Owner!=null) Owner.Show();
    this.Close();
  }
}
于 2013-09-03T10:07:39.960 回答
1

formAlan,您的代码的问题是您在按下时不会返回旧btnReopenAformB,而是打开一个新的formA.

避免这种情况的一种优雅方法是注册FormClosing活动

private void btnOpenformB_Click(System.Object sender, System.EventArgs e)
{
    FormB B = new FormB();
    B.FormClosing += b_FormClosing;
    this.Hide();
    B.Show();
}

  void b_FormClosing(object sender, FormClosingEventArgs e)
  {
     Show();
  }

或者,如果您不想处理事件,您可以这样做:

public partial class FormB : Form
{
  private Form _frm;
  public FormB(Form frm)
  {
     _frm = frm;
     InitializeComponent();
  }

  private void btnReopenA_Click(System.Object sender, System.EventArgs e) {
       if(_frm!=null) _frm.Show();
       this.Close();
  }
}

并在创建时formB

private void btnOpenformB_Click(System.Object sender, System.EventArgs e)
{
    FormB B = new FormB(this);
    this.Hide();
    B.Show();
}
于 2013-09-03T10:43:11.570 回答
1

以对话模式打开第二个表单:

this.Hide();
B.ShowDialog();
this.Show();
于 2013-09-03T09:51:13.073 回答
0

使用 Application.OpenForms[] 集合:Application.OpenForms["FormA"].Show()

于 2013-09-03T09:59:36.053 回答
0

我的问题是当我单击 FormB 上的按钮重新打开 FormA 时,当我单击 FormA 上的退出按钮时,它不会停止调试。

FormA这是因为您打开了另一个表单实例FromB

我应该怎么办?

您需要获取FormAinFormBShowthat 的参考。

我该怎么做?

    public class FormA
    {
        private void btnOpenformB_Click(System.Object sender, System.EventArgs e)
        {
            FormB B = new FormB();
            B.Closed+=OnFromBClosed; //Add this to handle FromB Closed event
            this.Hide();
            B.Show();
        }
        private void btnExit_Click(System.Object sender, System.EventArgs e)
        {
            this.Close();
        }

       //Show FormA again when FromB is closed
        protected void OnFromBClosed(object sender, EventArgs e)
        {
            this.Show();
        }

    }

public class FormB
{
    private void btnReopenA_Click(System.Object sender, System.EventArgs e)
    {
       // FormA A = new FormA(); remove this.
        this.Close();
       // A.Show();  and remove this
    }
}
于 2013-09-03T09:49:02.317 回答