【问题标题】:Calling a method from another Form in C#在 C# 中从另一个窗体调用方法
【发布时间】:2012-09-10 06:27:45
【问题描述】:

我希望当我以另一种形式 (Form2) 插入或更新记录时,Form1 上的 DataGridView 应在每次操作后自动刷新(调用 btnRefresh),或者最好等到所有更改操作完成,然后用所有更改更新DataGridView 表单Form2 的关闭事件。

我相信在 VB.NET 中这是通过 Form1.DataGridView.Refresh 实现的,但我不确定在 C# 中。有人告诉我,我使用属性将Form1 上的DataGridView 的引用传递给Form2,但由于我是C# 新手,所以我不知道该怎么做。我该如何解决这个问题?

我的刷新按钮代码:

private void btnRefresh_Click(object sender, EventArgs e)
{
    GVThesis.DataSource = thesisRepository.GetThesis();
    GVThesis.Refresh();
}

【问题讨论】:

  • 观察观察者设计模式

标签: c# mysql winforms entity-framework


【解决方案1】:

首先,将您的刷新代码包装到它自己的方法中,然后从您的点击事件处理程序方法中调用它,如下所示:

    private void btnRefresh_Click(object sender, EventArgs e) 
    { 
        this.RefreshData();
    }

    public void RefreshData()
    {
        GVThesis.DataSource = thesisRepository.GetThesis(); 
        GVThesis.Refresh(); 
    }

然后,假设您正在从 Form1 实例化并启动新表单 (Form2),只需进入 Form2 的代码并为自己创建一个新的构造函数重载,它将接受对 Form1 的引用,并将其存储在私有变量中,就像这样:

public partial class Form2 : Form
{
    private Form1 frm1;

    public Form2()
    {
        InitializeComponent();
    }

    public Form2(Form1 otherForm)
    {
        InitializeComponent();
        this.frm1 = otherForm;
    }
}

然后,您可以在 Form2 中的任何位置调用“刷新”,如下所示:

this.frm1.RefreshData();


编辑:

我创建了一个小示例,我无法在此处上传...但这里也是 VS 中程序本身的屏幕截图作为运行它并执行该功能的结果的屏幕截图...希望这会有所帮助。

程序(如果它看起来太小,请缩放您的视图)


结果:

【讨论】:

  • 我尝试使用您的解决方案。但我得到 NullReferenceException 是未处理的错误。顺便说一下我Form2的方式是这样的:otherForm Form2 = new otherForm(); Form2.StartPosition = FormStartPosition.CenterParent; Form2.ShowDialog(this);
  • 我用几个示例应用程序的屏幕截图更新了答案,该示例应用程序基本上执行了我相信您正在尝试做的事情。看看,让我知道你的想法。
  • 哦,我从您的评论中看到,您需要将对 Form1 的引用传递给构造函数,或者至少作为调用的参数传递给 Form2。将“this”传递给 .ShowDialog 方法不会成功。仔细查看我发布的屏幕截图,您应该会看到其中的方法。祝你好运!
猜你喜欢
  • 2011-08-10
  • 2022-01-23
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多