【问题标题】:C# Calling a method from another FormC# 从另一个窗体调用方法
【发布时间】:2011-08-10 06:13:44
【问题描述】:

嗨 我有 2 个表格 Form1 和 Form2

Form1 有一个表格,里面有我的记录,Form1 中有一个用于刷新表格的 Void。

Form2 是我的插入表单,我正在向 sqlserver 插入数据。我想当我在 Form2 中保存记录以运行 Form1 Refresh void 后。(当 Form1、Form2 打开时)

谢谢。

【问题讨论】:

  • Form1是否直接打开Form2?
  • 对不起,我的英语不好
  • 所以在Form2.ShowDialog()调用返回后立即调用Refresh方法。就这么简单。
  • Form2关闭时,可以刷新Form1吗?或者将 Form2 的 Owner 设置为 Form1 并以此方式调用 Refresh 方法。
  • 我喜欢它,但我怎么能从另一个类调用方法

标签: c# .net winforms oop forms


【解决方案1】:

试试这个从另一种形式调用方法:

if (System.Windows.Forms.Application.OpenForms["ParentFormName"] != null)
    {
        (System.Windows.Forms.Application.OpenForms["ParentFormName"] as   ParentFormName).MethodName(args);
    }

【讨论】:

    【解决方案2】:

    Form2 必须具有对 Form1 实例的引用。您可以在单击插入按钮时将此引用传递给 Form2:

    Form2 insertForm = new Form2();
    //Form2.ShowDialog(Me); - Correction - 'Me' is for VB. in C# it's:
    Form2.ShowDialog(this);
    

    接下来在 Form2 上,您可以像这样访问 Form1:

    (Form1)this.Parent.RefreshTable();
    

    【讨论】:

      【解决方案3】:

      调整 Form2 的构造,使其接受一个额外的参数,如下所示:

      ...
      private Form1 mainWindow;
      public Form2(Form1 mainWindow)
      {
         this.mainWindow = mainWindow;
      }
      ...
      public void HaveSavedSql()
      {
         this.mainWindow.RefreshAll();
      }
      

      您应该考虑查看Interfaces,以便您可以单独关注。接口对很多事情都很有用!

      【讨论】:

        【解决方案4】:

        在 Form1 中,当您打开 Form2 时,附加到 Form2 OnClose/Closed 事件或自定义 Save 事件,当引发该事件时,会刷新表单 1 中的表格。

        【讨论】:

        • 查看我对 Akram 回答的评论。这是一种创建内存泄漏的简单方法,对于刚入门的 .NET 程序员来说并不是一个好主意。您必须确保明确删除事件处理程序,并确保子表单被释放。
        猜你喜欢
        • 2022-01-23
        • 2012-09-10
        • 2018-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多