当一个表单重新出现时,自动运行一个函数C#

时间:2016-07-30 17:47:52

标签: c#

我有两种获胜形式,f1和f2。当我在f1上单击datagridview的行标题时,f1隐藏,f2显示,数据从f1传递到f2。现在用户使用f2并点击“关闭”后,f2隐藏并显示f1。我在f1中创建了函数来捕获用户对数据库所做的任何更改。问题是如何在f2隐藏和f1显示时自动调用此函数而不是使用按钮?感谢。

3 个答案:

答案 0 :(得分:1)

在隐藏Form1(f1)之前和Form2(f2)创建之后,向f2传递一个Action代理,当它关闭时将由f2调用。此委托方法将在Form1类中,并将重新激活隐藏的实例

public class Form2: Form
{
    public Action ReactivateParent;

    .... form2 methods ....

    // Here I call the ReactivateParent inside the FormClosed event handler
    // of Form2, but these lines can also in a button click event 
    // that terminates the Form2 instance....
    protected void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
        if(ReactivateParent != null) 
           ReactivateParent();
    }
}

现在在Form1中,当您准备显示Form2实例时,请绑定Action委托

Form2 f2 = new Form2();
f2.ReactivateParent += ReactivateMe;
this.Hide
f2.Show();
...

并向Form1添加一个名为ReactivateMe的方法

private void ReactivateMe()
{
    // Add here whatever you need to update your Form1 instance....
    ....
    // Reshow the now updated Form1 instance...
    this.Show();

}

这种方法的优点在于,Form2并不关心ReactivateParent中的内容,并且应用程序中的每个其他形式都可以重用Form2的功能,并在Form2实例关闭时得到通知。

为了进一步改进此模式,您还可以考虑修改Action委托以接收将由Form2实例填充并修改数据的自定义类的实例。这可以帮助避免调用数据库来更新Form1实例。

答案 1 :(得分:0)

  

问题是如何自动调用此函数而不是使用   一个按钮

然后在Form构造函数中调用该函数或处理FormLoad事件并在事件处理程序中调用该函数。

答案 2 :(得分:-1)

表单的事件中有一个名为Shown的事件。每次表单重新出现时都会运行。

我希望这会有所帮助。

修改

请改为尝试:

this.Hide();
f2.ShowDialog();

MethodUpdateValues();
this.Show();

这将在第二行暂停,并在您关闭f2时继续。