日期:2014-05-17  浏览次数:21105 次

子窗体访问父窗体的DataTable对象问题
问题:
有两个窗体Form1(父窗体)和Form2(子窗体),
其中Form1(父窗体)中有个DataTable对象(dt1),
当我在子窗体中通过Form2中代码访问父窗体的dt1对象时,
提示错误为:未将对象引用设置到对象的实例

Form1(父窗体)代码:
public  DataTable dt1=null;
dt1=InitDatable();

public  DataTable InitDatable()
{
   DataTable dt = new DataTable();
   DataColumn column;
   DataRow row;
   ...//以下代码省略

   return dt;
}

--------------------------------------
Form2(子窗体)代码:
Form1 parentForm=(Form1)this.Owner;

DataTable dt=parentForm.dt1//这句提示未将对象引用设置到对象的实例


请各位帮忙,谢谢!
------最佳解决方案--------------------
http://www.cnblogs.com/cosoft/archive/2011/08/08/2130659.html
------其他解决方案--------------------
1、显示Form2的时候显示设置Owner属性
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();
------其他解决方案--------------------
引用:
to:haukwong
谢谢回复!

我显示FORM2的时候是如下代码:
Form2 f2 = new Form2();
F2.ShowDialog(this) 

与您给出代码的功能是一样的,不知哪里出问题


 这种方法肯定是正确的,看看哪儿有没有写错。
调试看看是this.Owner是什么?
------其他解决方案--------------------
引用:
问题:
有两个窗体Form1(父窗体)和Form2(子窗体),
其中Form1(父窗体)中有个DataTable对象(dt1),
当我在子窗体中通过Form2中代码访问父窗体的dt1对象时,
提示错误为:未将对象引用设置到对象的实例

Form1(父窗体)代码:
C# code?123456789101112public  DataTable dt1=nul……


在InitDatable()中的列和行没有实例化吧
------其他解决方案--------------------
谢谢版主的回复!

我就是参照以上链接的方法4,
结果出现以上问题,还请帮忙看看以上这句代码问题出在哪儿?

DataTable dt=parentForm.dt1//这句提示未将对象引用设置到对象的实例
------其他解决方案--------------------
to:haukwong
谢谢回复!

我显示FORM2的时候是如下代码:
Form2 f2 = new Form2();
F2.ShowDialog(this) 

与您给出代码的功能是一样的,不知哪里出问题
------其他解决方案--------------------
感谢各位的回复,问题处理了。

最后发现问题出在Form1 parentForm=(Form1)this.Owner;
这句代码我原先是放在FORM2窗体的构造函数里,
public Form2()
        {
            InitializeComponent();
            Form1 f1=(Form1)this.Owner;      
        }
最后把位置调整到FORM2_Load(object sender, EventArgs e)事件里就可以了。

------其他解决方案--------------------
有知道原因的解释一下吧