-2

我正在创建一个当前有 3 种形式的应用程序,

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

我想要做的是找到某种方式重新加载第一个孩子表单,关闭你的第二个孩子表单。这将导致其中显示的记录被刷新,从而显示刚刚使用第二个子表单创建的新条目。

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

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

在登录事件的主窗体中 = 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();

        }
4

3 回答 3

1

使你ChildForm1成为主要形式:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

using(var loginForm = new LoginForm())
    if (loginForm.ShowDialog() != DialogResult.OK)
        return;

Application.Run(new ChildForm1());

ChildFrom2ChildForm1表格中显示:

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();
于 2013-01-08T15:45:28.333 回答
0

你可以使用这个:

在关闭前的第二个孩子表格中:

childForm1.refresh()

在第一个孩子形式:

public static void refresh() //You can use it with parameters too
{
  //do something
}
于 2013-01-08T17:32:55.177 回答
0

好的,我终于解决了这个问题,并发布了解决方案,希望有一天它可以帮助有类似问题的人。

实际的解决方案真的很简单,这就是需要做的。

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

cpanel child = new cpanel();

第二种形式的关闭按钮方法内部需要是这样的。

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

这将使您在更新内容后单击 2nd Form 的 Close 按钮​​时获得更新的 1st Form。

于 2013-01-09T14:53:17.440 回答