如何从另一个表单刷新表单?

时间:2011-10-17 18:32:44

标签: c# .net winforms

我有两个form- form1和form2。我使用下面的代码片段从form1调用form2:

Application.run(new Form2());

Form2 f2=new Form2();

f2.show();

此代码工作正常,我可以看到从form1加载form2。

现在我需要重复5次。当我第一次运行它时,必须创建新的比例(即上面的代码必须执行)但是当我运行第二次/第三次或第四次时,我需要刷新form2而不是创建一个新的form2。当我运行上面的代码5次时,会创建5个新的form2实例。相反,form2必须只显示一次,但是当我调用除第一个表单之外的任何其他时间时,它必须刷新。你能否对此有所了解?

2 个答案:

答案 0 :(得分:4)

  

。当我运行上面的代码5次时,5个新的form2实例   创建。相反,form2必须只显示一次但必须显示   当我打电话给第一张表格以外的任何其他时间时刷新。

这是因为你创建了5次:

 Form2 f2=new Form2();

这会创建一个新表单。如果你调用它5次,它将创建5个表单实例。

如果要刷新数据,则需要创建一个公共方法“Refresh()”并调用它。例如:

f2.Refresh();

这样,您将能够重做绑定或再次设置要为持久性刷新的数据。

答案 1 :(得分:4)

你可以尝试这样......

请注意,这只是Mediator模式的基本实现。我强烈建议你阅读一下这种模式,并一般地设计模式,以便更好地了解正在发生的事情。

同样,这是一个示例,但它确实有一些基本的错误检查,应该让你去。

您的表单声明将如下所示:

public partial class MainForm : Form
{
    private FormMediator _formMediator;

    public MainForm()
    {
        InitializeComponent();
    }

    public void SomeMethodThatOpensTheSubForm()
    {
        SubForm subForm = new SubForm();

        _formMediator = new FormMediator(this, subForm);

        subForm.Show(this);
    }
}

Mediator的修改后实现如下:

public class FormMediator
{
    private Form _subForm;
    private Form _mainForm;

    public FormMediator(Form mainForm, Form subForm)
    {
        if (mainForm == null)
            throw new ArgumentNullException("mainForm");

        if (subForm == null)
            throw new ArgumentNullException("subForm");

        _mainForm = mainForm;
        _subForm = subForm;

        _subForm.FormClosed += MainForm_FormClosed;
    }

    void MainForm_FormClosed(object sender, FormClosedEventArgs e)
    {
        try
        {
            _mainForm.Refresh();
        }
        catch(NullReferenceException ex)
        {
            throw new InvalidOperationException("Unable to close the Main Form because the FormMediator no longer has a reference to it.", ex);
        }
    }
}

我希望它可以帮助你......