关闭子表单时调用form_load()函数
本文关键字:load 函数 form 调用 表单 | 更新日期: 2023-09-27 17:51:04
我正在创建一个应用程序,目前有3个表单,
- 父表单-接受用户的登录详细信息,验证,如果成功隐藏自己并打开子表单。
- 第一个子表单-在表单加载连接到数据库获取数据并显示它。单击新条目,将打开另一个子表单。
- 第二个子窗体-用户为数据库中的新条目输入新数据,如果成功,则出现成功消息框。然后用户可以点击关闭按钮,这个表单隐藏自己,并显示第一个子表单。
我想做的是找出某种方式来重新加载第一个子窗体,在关闭三个第二子窗体。这将导致其中显示的记录得到刷新,从而显示刚刚使用2nd Child表单创建的新条目。
请指导我如何才能做到这一点。
下面是我用来处理隐藏事件的代码。
在login的主表单中event = true
cpanel child = new cpanel(); //create new isntance of form, cpanel is the 1st child form
child.FormClosed += new FormClosedEventHandler(child_FormClosed); //add handler to catch when child form is closed
child.Show(); //show child
this.Hide(); //hide parent
void child_FormClosed(object sender, FormClosedEventArgs e)
{
//when child form is closed, the parent reappears
MessageBox.Show("You have been logged out.");
Application.Exit();
}
在第二个子表单中,我有这样的内容
private void button3_Click(object sender, EventArgs e)
{
this.Close();
}
让你的ChildForm1
成为主要形式:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
using(var loginForm = new LoginForm())
if (loginForm.ShowDialog() != DialogResult.OK)
return;
Application.Run(new ChildForm1());
显示ChildFrom2
由ChildForm1
形式:
Hide(); // you really don't need to hide main form
using(var childForm2 = new ChildForm2())
{
if (childForm2.ShowDialog() == DialogResult.OK)
{
// update ChildForm1 with data from ChildForm2
}
}
Show();
您可以使用此:
关闭前的第二子窗体:
childForm1.refresh()
public static void refresh() //You can use it with parameters too
{
//do something
}
好了,我终于解决了这个问题,并发布了解决方案,希望有一天能帮助到有类似问题的人。
实际的解决方案真的很简单,下面是需要做的。
将这一行添加到子表单中,在第二个表单的受保护部分的某个地方,而不是在方法中,以便它始终存在。
cpanel child = new cpanel();
second Form的close button方法中的应该是这样的:
private void button3_Click(object sender, EventArgs e)
{
child.Show();
this.Hide(); //hide parent
}
这将使您在更新内容后单击第二个表单的关闭按钮时获得更新的第一个表单。