问题求解
短篇小说
我希望通过不同的形式检测"FormClosing()“事件,即当form1在form2中被实例化时,form2是否能够检测用户在form1中按exit?
长篇小说
我和我的团队正在开发一个windows表单应用程序。项目有两种形式:一种是主表单页面,另一种是通过这个主表单访问的。主表单如下所示:

第二个看起来是这样的:

如果在主窗体内按下"Ekle/Sil“按钮,您将被定向到表单2,在那里您可以编辑数据库条目。当您按主表单中的"SayfayıYenile“按钮时,从数据库中重新获取条目会刷新文本区域的内容。
我的问题是,当用户关闭第二个表单时,我想自动刷新主窗体。我的研究建议我应该使用"FormClosing()“事件来检测结束形式。但是,我想从主表单中检测到这一点。在第二个表单的源代码中实例化主表单似乎不是一个可靠的解决方案。有人能告诉我怎么做吗?
编辑
我解决了这个问题: 1)在主表单中创建了一个用于刷新页面的公共方法。2)在创建第二个窗体时,从主窗体发送"this“属性。3)在第二个调用此公共方法的表单中添加了一个"FormClosed()“处理程序。
尽管如此,我还是在寻找更好的解决方案。
编辑2
更好的解决方案InBetween's answer
发布于 2017-07-14 09:36:30
只需使用新的子窗口窗体的Form.Closed事件即可。所有事情都是从主表单中处理的:
void EkleSil_Clicked(object sender, EventArgs e) //or whatever method is called when button is clicked
{
var newChildForm = new ChildForm();
newChildForm.Closed += childFormClosed;
newChildForm.Show();
}
void childFormClosed(object sender, EventArgs e)
{
((Form)sender).Closed -=childFormClosed;
updateShownData();
}发布于 2017-07-14 09:19:47
可以在第二个窗体中创建事件,并在窗体关闭时引发该事件。在主窗体中处理事件,并在引发事件时刷新主窗体
发布于 2017-07-14 09:27:20
另一种选择是将Form1作为参数传递给Form2。然后在Form.Closing中使用Form2事件,并使用Form1引用触发某些内容。
Form1 form1Ref;
public Form2(Form1 mainform)
{
form1Ref = mainform;
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
form1Ref.SomeMethod();
}https://stackoverflow.com/questions/45099144
复制相似问题