通过不同的表单

时间:2017-07-14 09:15:51

标签: c# winforms

问题已解决


简短

我想通过不同的形式检测“FormClosing()”事件,即当form1关闭并在form2中实例化时,当用户在form1中按下exit时,可以检测到form2吗?

LONG STORY

我和我的团队正在开发一个Windows窗体应用程序。 Project有两种形式:一种是主表单页面,另一种是通过这种主表单访问。主要形式如下:

Main Form

第二个看起来像这样:

enter image description here

如果您在主窗体中按“Ekle / Sil”按钮,则会转到表单2,您可以在其中编辑数据库条目。当您在主窗体中按“SayfayıYenile”按钮时,通过从数据库中重新获取条目来刷新文本区域的内容。

我的问题是,我想在用户关闭第二个表单时自动刷新主表单。我的研究建议我应该使用“FormClosing()”事件来检测结束表单。但是,我想从主窗体中检测到这一点。在第二种形式的源代码中实例化主表单似乎不是一个可靠的解决方案。任何人都可以告诉我该怎么做?


修改
我解决了这个问题: 1)在主窗体中创建一个刷新页面的公共方法。 2)在创建第二个表单时从主表单发送“this”属性。 3)在调用此公共方法的第二种形式中添加了“FormClosed()”处理程序。

不过,我正在寻找更好的解决方案。


编辑2
更好的解决方案InBetween's answer

3 个答案:

答案 0 :(得分:0)

您可以在第二种形式中创建一个事件,并在表单关闭时将其提升。 处理主窗体中的事件,并在引发事件时刷新主窗体

答案 1 :(得分:0)

另一种选择是将Form1作为参数传递给Form2。然后使用Form2中的Form.Closing事件并使用Form1引用来触发某些内容。

Form1 form1Ref;

public Form2(Form1 mainform)
{
     form1Ref = mainform;
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
     form1Ref.SomeMethod();
}

答案 2 :(得分:0)

只需使用新子窗口窗体的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();
}