繁体   English   中英

在Windows窗体应用程序中关闭窗体?

[英]Closing Forms in Windows Form App?

我有两种形式,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上的退出按钮时,它不会停止调试。 我该怎么办? 谢谢!

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

在对话框模式下打开第二个表单

this.Hide();
B.ShowDialog();
this.Show();

LAN,与您的代码的问题是,你不回老formA当你按下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();
}

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

这是因为你开的另一个实例FormA形成你FromB

我该怎么办?

您需要在FormAFormB的参考并改为Show

我该怎么做?

    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
    }
}

使用Application.OpenForms []集合:Application.OpenForms [“FormA”]。Show()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM