当窗体再次出现时,自动运行函数C#

本文关键字:运行 函数 窗体 | 更新日期: 2023-09-27 17:59:16

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

当窗体再次出现时,自动运行函数C#

在隐藏Form1(f1)之前和创建Form2(f2)之后,将一个Action委托传递给f2,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实例。

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

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

表单的Events中有一个名为Shown的事件。每次窗体再次出现时都会运行此操作。

我希望这能有所帮助。

编辑:

试试这个:

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

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