我有一堆Windows窗体。每个表单都有“后退”和“下一步”按钮,用于切换表单。例如,单击Form3上的“返回”然后我们转到Form2。然后单击Form2上的“下一步”按钮,然后显示Form3。
现在我的问题是,如果我们从一开始就点击“下一步”,它就可以顺利运行。但是,如果我单击Form3上的“Back”,则会显示Form2,然后单击Form3上的“Next”转到Form3。代码不会转到Form3_Load事件。 我的代码出了什么问题?
public partial class Form3 : Form
{
Form2 FormPrev;
Form4 FormNext;
List<DataRow> drlist = new List<DataRow>();
DataTable dt = new DataTable();
public Form3(Form2 _FormPrev)
{
InitializeComponent();
this.FormPrev = _FormPrev;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnNext_Click(object sender, EventArgs e)
{
ShowNext();
}
private void btnBack_Click(object sender, EventArgs e)
{
ShowPrev();
}
private void ShowNext()
{
if (FormNext == null)
FormNext = new Form4(this);
FormNext.Show();
this.Hide();
}
private void ShowPrev()
{
FormPrev.Show();
this.Hide();
}
private void Form3_Load(object sender, EventArgs e)
{
// blah blah.
}
感谢。
答案 0 :(得分:3)
只有在第一次调用表单时才会触发表单的Load事件。如果您随后隐藏了表单并重新显示它,那么这不会重新加载表单,因此不会触发表单的Load事件。
如果要在重新显示表单时使用事件来处理,那么您应该查看以下更合适的事件:
激活 显示 VisibleChanged
答案 1 :(得分:1)
表单加载事件仅在首次显示表单之前被触发。 您应该使用其他事件,例如Form Activated或GotFocus。
答案 2 :(得分:0)
这是正常行为。负载是负载形式,而不是显示。在您的情况下,您尝试显示隐藏的表格。如果你想使用
form.Show()
而不是使用
form.Hide()
但是
form.Close()
<强> UPD:强> 代码应该是:
public partial class Form3 : Form
{
List<DataRow> drlist = new List<DataRow>();
DataTable dt = new DataTable();
public Form3()
{
InitializeComponent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnNext_Click(object sender, EventArgs e)
{
ShowNext();
}
private void btnBack_Click(object sender, EventArgs e)
{
ShowPrev();
}
private void ShowNext()
{
Form4 formNext = new Form4();
formNext.Show();
this.Close();
}
private void ShowPrev()
{
Form2 formPrev = new Form2();
formPrev.Show();
this.Close();
}
private void Form3_Load(object sender, EventArgs e)
{
// blah blah.
}
}
但是这样的颜色存在问题 - 你不应该关闭你的主要形式。