提问人:Giovanni Di Toro 提问时间:5/29/2015 最后编辑:Giovanni Di Toro 更新时间:2/12/2018 访问量:14931
从另一个打开的窗体刷新打开的窗体
Refresh an open form from another open form
问:
我想从另一个打开的表单 (form2) button_click() 刷新已打开的表单 (form1)。在 form1 中,我显示 form2 保存的数据,当 form1 已经打开时,如果在 form2 上保存了新数据,我希望它刷新以显示它。
问题是我尝试遍历“Application.Openforms”,但事实证明它是只读的,一旦找到就无法访问表单,并且我不知道如何从 *form1* 访问 *form2*,因为我无法简单地找到它。
如何从 *form2* 访问 *form1*?
编辑:
Form1 实际上是从 Form2 打开的。
Application.Openforms 的问题在于,正如我所说,已经打开了表单的只读列表,我实际上无法通过它访问表单。他们根本没有方法,我建议您尝试使用 Application.OpenForms 并在您不知道它是如何工作的时查找它。
此外,展示我已经尝试过的内容是没有意义的,因为它包括 ,但为了提供信息:Application.OpenForms
FormCollection of = Application.OpenForms;
foreach (var f in of)
{
if (f.GetType().ToString() == "Kontrl_Doc.Visualizar")
{
f.Refresh();
}
}
当我单击 Form2 中的按钮 (button_click()) 时,它会检查 Form1 是否打开。如果 Form1 未打开,它会打开一个,如果是,我希望它刷新它。同时,它关闭 Form2 并再次打开 Form2,以便重置 is 字段。
我想做的是,如果 form1 已经打开,它 form2 应该告诉它用 form 1 刷新已经打开的窗口。
答:
"Form1 实际上是从 Form2 打开的“ - 如果是这种情况,则只需使用 Form2 中的表单变量调用 Refresh。如有必要,请将其设为 Form2 类中的私有字段,或将其存储在数组中以供以后使用。
例如:
(在 Form2 中的某个位置)
Form1 form1 = new Form1();
form1.Show();
(在 Form2 中的按钮单击内)
form1.Refresh();
评论
您可以使用事件。在 form2 中,放置以下代码
public event Action ReloadForm1;
//on the place where you will reload form1
ReloadForm1();
在 Form1 中,如果您有打开 Form2:
form2.ReloadForm1 += Reload;
//outside method
void Reload()
{
this.Reload();
}
评论
在 form1 中创建一个 void 方法并添加要刷新的组件,也许您想从 db 重新加载下拉列表
public void Refresh()
{
...
}
然后打开Form2对话框 捕获对话结果
评论
OpenForms
I cannot access the form once found