从另一个打开的窗体刷新打开的窗体

Refresh an open form from another open form

提问人:Giovanni Di Toro 提问时间:5/29/2015 最后编辑:Giovanni Di Toro 更新时间:2/12/2018 访问量:14931

问:

我想从另一个打开的表单 (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 刷新已经打开的窗口。

C# 窗体 WinForms

评论

1赞 Eugene Podskal 5/29/2015
当您想要更新表单的内容而不是替换表单时,只读收集的问题是什么?你是什么意思?显示您已经尝试过的内容以及未能产生预期结果的内容。另外,你读过 stackoverflow.com/questions/10704020/......stackoverflow.com/questions/1559770/......吗?OpenFormsI cannot access the form once found
0赞 Bernd Linde 5/29/2015
form1 是从 form2 打开的还是相反的?它们都是从共同的父母那里打开的吗?您是否查看/搜索过如何从一个类中设置另一个类中的属性(因为表单是类的实例)
0赞 Idle_Mind 5/29/2015
“从另一个打开的窗体 (form2) button_click()” 单击此按钮时,是否希望 Form2 关闭并返回到 Form1?...还是 Form2 会保持打开状态?
0赞 Chris Dunaway 5/29/2015
"Form1 实际上是从 Form2 打开的“- 如果是这种情况,则只需使用 Form2 中的表单变量调用 Refresh。如有必要,请将其设为 Form2 类中的私有字段,或将其存储在数组中以供以后使用。
0赞 Chris Dunaway 5/30/2015
在 Form2 中打开 Form1 时,应将对 Form1 的引用存储在变量中,以便以后可以使用它。

答:

2赞 Chris Dunaway 5/29/2015 #1

"Form1 实际上是从 Form2 打开的“ - 如果是这种情况,则只需使用 Form2 中的表单变量调用 Refresh。如有必要,请将其设为 Form2 类中的私有字段,或将其存储在数组中以供以后使用。

例如:

(在 Form2 中的某个位置)

Form1 form1 = new Form1();
form1.Show();

(在 Form2 中的按钮单击内)

form1.Refresh();

评论

1赞 Giovanni Di Toro 5/30/2015
那只会创建 form1 的另一个实例并在另一个窗口中打开它,我想做的是: 如果我已经打开了 form1 ,我希望它使用该表单刷新已经打开的窗口。
0赞 Chris Dunaway 5/30/2015
您之前在帖子中说过,您从 Form1 中打开了 Form2。执行此操作时,请将引用保存在变量中。您可以稍后在需要刷新时使用该引用。
2赞 H. Pauwelyn 5/30/2015 #2

您可以使用事件。在 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();
}

评论

0赞 H. Pauwelyn 6/11/2015
@Giovanni 迪托罗:如果你觉得答案很好,请接受。欢迎来到 stackoverflow。更多的信息: www.stackoverflow.com/tour
1赞 Teezy7 2/12/2018 #3

在 form1 中创建一个 void 方法并添加要刷新的组件,也许您想从 db 重新加载下拉列表

public void Refresh()
{
  ...
}

然后打开Form2对话框 捕获对话结果