关闭子表单时调用form_load()函数

时间:2013-01-08 15:41:53

标签: c#

我正在创建一个目前有3种形式的应用

  • 父表单 - 接受用户的登录详细信息,验证并成功隐藏自己并打开子表单。
  • 第一个子表单 - 在表单加载连接到数据库时获取数据并显示它。单击新条目,将打开另一个子表单。
  • 第二个子表单 - 用户在数据库中为新条目输入新数据,成功时会出现成功消息框。然后,用户可以单击关闭按钮,此表单将隐藏,并显示第一个子表单。

我想要做的是在关闭你的第二个儿童表格时找出重新加载第一个儿童表格。这将导致显示在其中的记录被刷新,从而显示刚刚使用第二个子表单创建的新条目。

请指导我如何实现这一目标。

以下是我用来处理隐藏事件的代码。

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

        }

3 个答案:

答案 0 :(得分:1)

让您的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();

答案 1 :(得分:0)

您可以使用此功能:

在结束前的第二个孩子表格中:

childForm1.refresh()

以第一个孩子形式:

public static void refresh() //You can use it with parameters too
{
  //do something
}

答案 2 :(得分:0)

好的我再一次解决了这个问题,并且正在发布解决方案,希望有朝一日可以帮助有类似问题的人。

实际的解决方案非常简单,这是需要完成的工作。

在子表单中添加此行,在第二个表单的受保护部分中的某个位置,而不是在方法内部,以便始终存在。

cpanel child = new cpanel();
第二个表格的关闭按钮方法中的

需要是这样的。

private void button3_Click(object sender, EventArgs e)
        {
            child.Show();
            this.Hide(); //hide parent
        }

这将使您在更新内容后单击第二个表格的关闭按钮时获得更新的第一个表格。