我有两种形式,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上的退出按钮时,它不会停止调试。我该怎么办?谢谢!
答案 0 :(得分: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();
}
}
答案 1 :(得分:1)
在对话框模式下打开第二个表单:
this.Hide();
B.ShowDialog();
this.Show();
答案 2 :(得分:1)
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();
}
答案 3 :(得分:0)
我的问题是当我单击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
}
}
答案 4 :(得分:0)
使用Application.OpenForms []集合: Application.OpenForms [ “备考”]。显示()