[英]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
当你按下btnReopenA
在formB
,而不是你打开一个新的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
我该怎么办?
您需要在FormA
中FormB
的参考并改为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.