我想从另一个已打开的表单( 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,以便重置字段。
我要做的是,如果form1已经打开,那么form2应该告诉它用表单1刷新已打开的窗口。
答案 0 :(得分:2)
你可以使用活动。在form2中,您可以放置此代码
public event Action ReloadForm1;
//on the place where you will reload form1
ReloadForm1();
如果你有开放形式2,则在form1中:
form2.ReloadForm1 += Reload;
//outside method
void Reload()
{
this.Reload();
}
答案 1 :(得分:1)
" Form1实际上是从Form2 " - 如果是这种情况,则只需使用Form2中的表单变量调用Refresh。如有必要,将其作为Form2类中的私有字段或将其存储在数组中供以后使用。
例如:
(Form2中的某处)
Form1 form1 = new Form1();
form1.Show();
(在Form2中单击按钮内部)
form1.Refresh();
答案 2 :(得分:1)
在form1中创建一个void方法并添加你想刷新的组件,也许你想从db重新下载一个下拉列表
public void Refresh()
{
...
}
然后打开form2的对话框 捕捉对话框结果