从另一个打开的表单刷新打开的表单

时间:2015-05-29 14:27:56

标签: c# forms winforms

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

3 个答案:

答案 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的对话框 捕捉对话框结果