我每次Form1
关闭时都会尝试在Form2
上刷新我的数据网格,但不断收到以下错误消息:NullReferenceException was handled. Object reference not set to an instance of an object.
这发生在Form1Instance.RefreshGridView();
行{ {1}}。知道如何解决这个问题吗?我的代码如下:
Form1.cs的
Form2
Form2.cs
public void RefreshGridView()
{
BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
dataGridView1.DataSource = bs;
}
例外明细
private Form1 Form1Instance
{
get;
set;
}
public Form2(Form1 form1Instance)
{
Form1Instance = form1Instance;
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Form1Instance.RefreshGridView();
}
答案 0 :(得分:2)
而不是使用FormClosed事件尝试处理FormClosing事件:
来自MSDN:当表单关闭时,它会被释放,释放与表单关联的所有资源。
因此,在Form.Closed事件中,您的Form1实例已处置。您正在尝试访问Disposed元素。
并且您不需要将Form1实例传递给Form2构造函数。当从Form1显示Form2时,您可以简单地执行此操作:
Form2 f2 = new Form2();
f2.Show(this);
然后你可以像这样访问Form2中的Form1:
((Form1)Owner).RefreshGridView();
所有者代表您的父表单,即Form1
答案 1 :(得分:1)
在此示例中,错误由Form1Instance
必须为null的事实构成。
在刷新数据源之前,请尝试检查Form1Instance
是否实际设置为值。
实施例
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
if(Form1Instance != null)
Form1Instance.RefreshGridView();
}
答案 2 :(得分:0)
如@ Selman22所示,您应该在处理表单结束事件时调用父表单。您也可以触发自己的事件并在父表单中处理它。