当窗体再次出现时,自动运行函数C#
本文关键字:运行 函数 窗体 | 更新日期: 2023-09-27 17:59:16
我有两种获胜形式,f1和f2。当我点击f1上数据网格视图的行标题时,f1隐藏,f2显示,数据从f1传递到f2。现在,在用户操作f2并点击"关闭"后,f2隐藏,f1显示。我在f1中创建了一个函数来捕捉用户对数据库所做的任何更改。问题是,当f2隐藏和f1显示时,我如何自动调用此函数而不是使用按钮?谢谢
在隐藏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时继续。