【问题标题】:How to Refresh a form from another form?如何从另一个表单刷新一个表单?
【发布时间】:2011-10-17 18:32:44
【问题描述】:

我有两个表格 - form1 和 form2。我使用下面的 sn-p 从 form1 调用 form2:

Application.run(new Form2());

Form2 f2=new Form2();

f2.show();

这段代码运行良好,我可以看到从 form1 加载的 form2。

现在我需要重复这个说 5 次。当我第一次运行它时,必须创建新的 istance(即必须执行上面的代码)但是当我第 2 次/第 3 次或第 4 次运行它时,我需要刷新 form2 而不是创建新的 form2。当我运行上述代码 5 次时,会创建 5 个新的 form2 实例。相反,form2 必须只显示一次,但当我调用第一个表单以外的任何其他时间时,它必须刷新。你能解释一下吗?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    。当我运行上述代码 5 次时,form2 的 5 个新实例是 创建的。相反,form2 必须只显示一次,但它必须 当我调用第一个表单以外的任何其他时间时刷新。

    这是因为你创建了 5 次:

     Form2 f2=new Form2();
    

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

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

    f2.Refresh();
    

    这样,您将能够重新绑定或再次设置要刷新的数据以进行持久化。

    【讨论】:

      【解决方案2】:

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

      请注意,这只是中介者模式的初步实现。我强烈建议您阅读有关该模式以及一般设计模式的信息,以便更好地了解正在发生的事情。

      同样,这是一个示例,但它确实有一些基本的错误检查,应该可以帮助您进行操作。

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

      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);
              }
          }
      }
      

      希望对你有帮助....

      【讨论】:

        猜你喜欢
        • 2012-05-25
        • 2015-01-16
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 2012-08-13
        • 2011-04-27
        • 1970-01-01
        • 2013-07-02
        相关资源
        最近更新 更多